题目链接:https://vjudge.net/contest/28079#problem/G
题目大意:约瑟夫环问题,给你n和k(分别代表总人数和每次要数到k),求最后一个人的位置。
解题思路:因为n和k的范围都较大所以不能直接模拟,要推导出规律f(n) = (f(n-1) + k) % n。
代码:
#include<iostream>
#include<stdio.h>
using namespace std; int main(){
int T;
scanf("%d",&T);
int cas=;
while(T--){
int n,k;
scanf("%d%d",&n,&k);
int pos=;
for(int i=;i<=n;i++)
pos=(pos+k)%i;
printf("Case %d: %d\n",++cas,pos+);
}
}