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