码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-17 21:47:53      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

标签:

原文地址:http://www.cnblogs.com/yongjiuzhizhen/p/4345575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!