• 【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 }
  • 相关阅读:
    iOS 远程推送
    iOS 本地推送
    iOS 循环利用的注意事项
    iOS 通知代理执行代理方式时,代理为nil的解决办法
    iOS SSZipArchive
    iOS PushMebaby
    Objective
    Objective
    Objective
    Objective
  • 原文地址:https://www.cnblogs.com/yongjiuzhizhen/p/4345575.html
Copyright © 2020-2023  润新知