zoukankan      html  css  js  c++  java
  • 约瑟夫问题【1】

    题目:n个人围成一圈,顺序排号,从第1个人(编号为0的人)从1开始报数,报到m(m<=n)的人出圈,然后下面未出圈的人接着从1开始报数,直到所有人都出圈。请按出圈顺序输出出圈的人的编号。

    代码如下:

     1 #include <iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int i, k, m, n, num[50], *p;
     6     cout << "input number of person: n=";
     7     cin >> n;
     8     p = num;
     9     for (i = 0; i<n; i++)
    10         *(p + i) = i + 1;          // 以1至n为序给每个人编号 
    11     i = 0;                   // i为每次循环时计数变量 
    12     k = 0;                   // k为按1,2,3报数时的计数变量 
    13     m = 0;                   // m为退出人数 
    14     while (m<n - 1)          // 当退出人数比n-1少时(即未退出人数大于1时)执行循环体
    15     {
    16         if (*(p + i) != 0)  k++;
    17         if (k == m)             // 将退出的人的编号置为0 
    18         {
    19             *(p + i) = 0;
    20             k = 0;
    21             m++;
    22         }
    23         i++;
    24         if (i == n) i = 0;        // 报数到尾后,i恢复为0 
    25     }
    26     while (*p == 0) p++;
    27     cout << "The last one is NO." << *p << endl;
    28     return 0;
    29 }

    当n=10,m=3是,结果如下:

  • 相关阅读:
    Nginx
    Nginx & AWStats 安装、配置、使用
    Nginx
    linux
    工作中的 Vim 和 git
    后端
    django
    django
    awk流程控制
    linux系统内置函数
  • 原文地址:https://www.cnblogs.com/gaigaichen/p/7603829.html
Copyright © 2011-2022 走看看