k.第k人

mac2022-06-30  23

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

 

转载于:https://www.cnblogs.com/KafuuMegumi/p/10123910.html

最新回复(0)