黑马程序员技术交流社区
标题:
围圈报数问题的代码实现-分享
[打印本页]
作者:
liulunjiang
时间:
2015-10-24 09:11
标题:
围圈报数问题的代码实现-分享
本帖最后由 liulunjiang 于 2015-10-24 09:13 编辑
围圈报数这个问题大家肯定遇到过,我贴一个自己写的简单的程序,供参考。
15人围圈报数,报到3的退出并继续重新从1开始报,最后剩下谁? 可以自行拓展成n个人报数,报到m退出。
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
//报数累加器
int count=1;
//在场人数
int numRemain=15;
//定义并初始化报数标记数组,对应15个位置的人,若为1则可以参与报数,若为0表明此人已退出,不能参与保护
int flag[15];
for (int i=0; i<15; i++) {
flag[i]=1;
}
//i为每个人对应的下标
for (int i=0; ; i++) {
//i为15时,即完成一圈,下标重新归位
if (i==15){
i=0;
}
//如果报数标记值为0,表示此人已退出,不参加报数
if (flag[i]==0){
continue;
}
//如果在场人数剩下1个,则此人是叛徒,输出序号并退出循环。
if (numRemain==1){
printf("最后剩下的人的序号是:%d\n",i+1);
break;
}
//报数到3时,对应的报数标记置0,此人退出之后的报数,报数累加器重新置1,在场人数减1
if (count==3) {
flag[i]=0;
count=1;
numRemain--;
}else{
count++;
}
}
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2