• 约瑟夫环问题


    问题描述:有n个人排成一圈,循环报数,毎到数字k,那人自动退出,下个人继续从1开始报数,如此循环,直至剩下最后一个人。问最后那个人的序号是多少?

    代码如下:

     1 //约瑟夫环问题,以n为总人数,k(此处为3)为循环退出的序号
     2 #include<stdio.h>
     3 int c[100];
     4 int *p;
     5 int n,k;
     6 int main()
     7 {
     8     p=c;
     9     void Josephus(int *,int,int);
    10     printf("请输入总人数n,要退出的序号k:");
    11     scanf("%d%d",&n,&k);
    12     Josephus(p,n,k);
    13     return 0;
    14 }
    15 
    16 void Josephus(int *p,int n,int k)
    17 {
    18     int i,j,m;
    19     for(i=0;i<n;i++) *(p+i)=i+1;  //将0号单元编成1号位
    20     i=0;
    21     j=0;
    22     m=0;
    23     
    24     while(m<n-1)    //m从零开始,这样总共退留个人,想留x个人,条件表达式为m<n-x
    25     {
    26         if(*(p+i)!=0) j++;
    27         if(j==k)
    28         {
    29             *(p+i)=0;
    30             j=0;    //把这个位置设0,下一非零位置开始继续j从1计数
    31             m++;
    32         }
    33         i++;
    34         if(i==n) i=0;
    35     }
    36     
    37     for(i=0;i<n;i++) 
    38     {
    39         if(*p!=0)
    40         {
    41             printf("最后剩下的人的编号是:%d
    ",*p);
    42             //break;
    43         }
    44         p++;
    45     }
    46 }

    运行结果:

  • 相关阅读:
    vue2.0是不支持通过下标来更改数组的,无法做到响应式
    C# 深拷贝 Bitmap对象示例
    vscode终端中文乱码
    TkbmMemTable使用总结
    openssl 证书概念介绍
    openssl源码介绍
    python变量赋值特性
    openssl安装
    github开源协议选择
    NLP 多分类神经网络
  • 原文地址:https://www.cnblogs.com/bboykaku/p/12504753.html
Copyright © 2020-2023  润新知