问题来自:《C程序设计》(第四版)谭浩强 清华大学出版社 第291页
有n个人围城一圈,顺序排号。从第一个人开始报数(从1报到m),凡是报到m的人退出圈子,接着从循环队列的下一位开始报数(该数为1)。问最后留下的是原来几号的那位。
注:本例为模拟题,按要求写程序即可。
示例代码:
1 #include <stdio.h> 2 3 int a[100]; 4 5 int find(int *a, int n, int m) 6 { 7 int counter = n; 8 int i=0,j=0; 9 while(counter != 1) //还剩一人时跳出循环 10 { 11 for(j=1;j<=m;) //从1报数,报到了m 12 { 13 i = (i++)%n; 14 if(a[i] != 0) 15 { 16 j++; 17 } 18 } 19 a[i] = 0; //将报m的人踢出队列 20 counter--; //计数器-1 21 } 22 for(i=0;i<n;i++) 23 { 24 if(a[i] != 0) 25 return i; //返回唯一的剩余者的位置 26 } 27 } 28 29 30 //test 31 int main() 32 { 33 int i; 34 for(i=0;i<100;i++) 35 { 36 a[i] = i; 37 } 38 printf("%d",find(a,5,3)); 39 return 0; 40 }