Description
有m个猴子围成一圈,按顺时针编号,分别为1到m。现打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始顺时针报数,报到n的猴子出圈,紧接着从下一个又从1顺时针循环报数,...,如此下去,最后剩下来的就是大王。
Input
第一行是一个正整数T表示测试数据的组数。下面共有T行,每行两个整数m和n,用一个空格隔开,分别表示猴子的个数和报数n。1<=m<=100,1<=n<=200。
Output
每组数据对应有一个输出,表示大王的编号。
Sample Input
1
3 2
Sample Output
3
哥哥的正确解法:
1 #include <stdio.h> 2 3 int p[1000],q[1000],a,b,i,j,t,flag[1000],pos,s; 4 5 int xuanze(int a,int b) 6 { 7 for (i=1;i<a+1;i++) flag[i]=1; 8 int pos=1; 9 for (i=a;i>1;i--) 10 { 11 // if (b>i) b=b % i; 12 int k=0; 13 int j=pos; 14 while(1) 15 { 16 if (flag[j]==1) k++; 17 if (k==b) {flag[j]=0;if (j+1<=a) pos=j+1;else pos=1;break;} 18 j++; 19 if (j>a) j=1; 20 } 21 } 22 23 for (i=1;i<=a;i++){ 24 if (flag[i]==1) return(i); 25 } 26 } 27 28 29 int main() 30 { 31 scanf("%d",&t); 32 for (i=0;i<t;i++) scanf("%d %d",&p[i],&q[i]); 33 for (s=0;s<t;s++) printf("%d\n",xuanze(p[s],q[s])); 34 return 0; 35 }