HDU 5643 King's Game | 约瑟夫环变形

经典约瑟夫环

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;
}
原文地址:https://www.cnblogs.com/kimsimple/p/7468431.html