【C】n个人排成一圈报数的问题

问题来自:《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 }

 

posted @ 2015-03-17 21:12  永久指针  阅读(1016)  评论(0编辑  收藏  举报