经典约瑟夫环
1 int f[N] ={ 0 }; 2 for(int i=2; i<=n; i++) 3 { 4 f[i] = (f[i-1] + k) % i; 5 }
变形:k是变化的
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <stdlib.h> #include <queue> #include <map> using namespace std; typedef long long LL; #define met(a, b) memset(a, b, sizeof(a)) #define INF 0x3f3f3f3f #define N 5210 int main() { int T, n, f[N] = { 0 }; scanf("%d", &T); while(T--) { scanf("%d", &n); int k = n-1; for(int i=2; i<=n; i++) { f[i] = (f[i-1] + k) % i; k --; } printf("%d ", f[n] + 1); } return 0; }