1. 程式人生 > >k.第k人

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