A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 liulunjiang 于 2015-10-24 09:13 编辑

围圈报数这个问题大家肯定遇到过,我贴一个自己写的简单的程序,供参考。
15人围圈报数,报到3的退出并继续重新从1开始报,最后剩下谁?  可以自行拓展成n个人报数,报到m退出。
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, const char * argv[]) {
  4.     //报数累加器
  5.     int count=1;
  6.     //在场人数
  7.     int numRemain=15;

  8.     //定义并初始化报数标记数组,对应15个位置的人,若为1则可以参与报数,若为0表明此人已退出,不能参与保护
  9.     int flag[15];
  10.     for (int i=0; i<15; i++) {
  11.         flag[i]=1;
  12.     }
  13.     //i为每个人对应的下标
  14.     for (int i=0; ; i++) {
  15.         //i为15时,即完成一圈,下标重新归位
  16.         if (i==15){
  17.             i=0;
  18.         }
  19.         //如果报数标记值为0,表示此人已退出,不参加报数
  20.         if (flag[i]==0){
  21.             continue;
  22.         }
  23.         //如果在场人数剩下1个,则此人是叛徒,输出序号并退出循环。
  24.         if (numRemain==1){
  25.             printf("最后剩下的人的序号是:%d\n",i+1);
  26.             break;
  27.         }
  28.         //报数到3时,对应的报数标记置0,此人退出之后的报数,报数累加器重新置1,在场人数减1
  29.         if (count==3) {
  30.             flag[i]=0;
  31.             count=1;
  32.             numRemain--;
  33.         }else{
  34.             count++;
  35.         }
  36.     }

  37.     return 0;
  38. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马