k.第k人

k: 第k人

Time Limit: 1 Sec  Memory Limit: 128 MB

Description

 TT在跟朋友一起做游戏,

游戏规则:n个小朋友(从1开始编号)手拉手,从第一个小朋友开始报数,喊出k的小朋友从圈中出去,然后下个小朋友从1开始报数。

当圈中只剩下一个小朋友的时候结束。TT想知道谁会胜出。

Input

 T(T组,T<=10)

T行,每行两个个数字n,k代表当前有n个小朋友(n<=1000)k如上述(k<=1e5)

Output

 对每组输出胜出者的编号

 

Sample Input

1
5 2

Sample Output

3

HINT

 

 第一个出去的是2号:1 3 4 5


第二个出去的是4号,1 3 5


第三个出去的是1号,3 5


第四个出去的是5号,3


3胜出

 

  直接O(n^2)暴力即可,注意k比较大每次对剩余人数取余。

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 bool bo[1005];
 5 int main(){
 6     int T,n,k;
 7     scanf("%d",&T);
 8     while(T--){
 9         memset(bo,0,sizeof bo);
10         scanf("%d%d",&n,&k);
11         k--;
12         int now=1;
13         for(int i=n;i>1;i--){
14             int t=k%i,cnt=0;
15             while(cnt<t){
16                 now=now%n+1;
17                 if(!bo[now])cnt++;
18             }
19             bo[now]=1;
20             while(bo[now])now=now%n+1;//找到下一个起点 
21         }
22         printf("%d\n",now);
23     }
24     return 0;
25 }
View Code

 

posted @ 2018-12-15 17:06  KafuuMegumi  阅读(224)  评论(0编辑  收藏  举报