题目1,假设有30个人,没人轮流循环报数,当报到9的倍数的人出列,剩下的继续,问最后剩下的1个人是原来的第几号?

代码如下

/** @Date 2019-09-04* @Author krisfan* @Description N个人排成一队循环报数,报N的倍数的出列,最后剩下的的是原来队列的第几位*/
#include <stdio.h>#define N 30
#define M 9int yoself(void);
int main(int argc, char const* argv[])
{int ans;ans = yoself();printf("%d个人排成一队循环报数,报%d的倍数的出列,最后剩下的的是原来队列的第%d位\n", N, M, ans);return 0;
}
int yoself(void)
{int i, j, a[N] = { 0 }, left = N;//a[N]标志位,1表示出列,0表示留下,left是剩下的人数for (i = 0, j = 1; left > 1; i++, j++) {//i-标志数组下标,j-报数倍数下标if (a[i % N] == 1) {j--;continue;}if (j % M == 0) {a[i % N] = 1;left--;}}i = 0;while (a[i++] != 0)//找到留下的那位的坐标,注意到数组下标和原来位置差一;return i;
}

运行结果如图

问题2,约瑟夫问题,如何在M(30)个人中每9人出去一个人,使出去的N(15)人全是一个阵营,该如何站队?

代码如下

/**@Date 2019-09-01*@Author krisfan*@Description 约瑟夫问题,如何在M(30)个人中每9人出去一个人,使出去的N(15)人全是一个阵营,该如何站队*/
#include <stdio.h>
#define N 30//N必须是偶数
#define M 9
int yoself(int* a);
int main(void)
{int a[N];int i;printf("约瑟夫问题的解\n");yoself(a);for (i = 0; i < N; i++) {if (a[i])printf("%-4d", i + 1);/*if ((i + 1) % 10 == 0)printf("\n" );*/}return 0;
}
int yoself(int* a)
{int i = 0, j = 0, k = 1;for (; i < N; i++)a[i] = 1;for (i = 0;; i++)while (a[i % N] != 0) {a[i % N] = k % M;if (a[i % N] == 0)j++;if (j == N/2)return 0;i++;k++;}
}

运行结果如图

例子中N,M可以改成自己想要的值

约瑟夫问题C语言实现——N个人排成一队循环报数,报M的倍数的出列,最后剩下的的是原来队列的第几位相关推荐

  1. 士兵队列训练问题:某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的

    题目描述: 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列, ...

  2. 单片机的串行通讯就是排成一队走,并行就是排成一列走

    单片机的串行通讯就是排成一队走,并行就是排成一列走 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领 ...

  3. 约瑟夫环问题有10(100人或者n个)个人围成一圈,从第一个人开始报数(报1、2、3),只要报3的人就出去, 然后不停的循环报数,直到最后剩下一个人,计算出这个人最开始的位置。

    有10(100人或者n个)个人围成一圈,从第一个人开始报数(报1.2.3),只要报3的人就出去, 然后不停的循环报数,直到最后剩下一个人,计算出这个人最开始的位置.其实就是约瑟夫环问题 新手小白,多多 ...

  4. c语言自动循环输入,C语言用for如何实现多次循环的输入输出

    C语言用for如何实现多次循环的输入输出 关注:241  答案:3  mip版 解决时间 2021-01-27 11:18 提问者傃顏莄蒾亾 2021-01-26 12:37 #includevoid ...

  5. c语言编程题:m个人围成一圈,每数n个人就踢出一个直到剩下一个人,m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有多少种方法?...

    导航:网站首页 > m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有多少种方法? m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有 ...

  6. python约瑟夫环_Python语言之如何实现约瑟夫环问题

    本文Python语言实例讲述了Python实现约瑟夫环问题的方法.分享给大家供大家参考,希望对大家学习Python语言有所帮助,具体如下: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0 ...

  7. 约瑟夫问题(c语言)

    摘自百度百科 N 个人围成一圈,从第一个人开始报数,数到 M 的人出圈:再由下一个人开始报数,数到 M 的人出圈. 约瑟夫问题的两种形式: 1.求出最后剩下的人的原始序号: #include<s ...

  8. 约瑟夫环--C语言解析

    约瑟夫环问题 约瑟夫环:在我们C语言的初学基础中,会遇到魔方阵,做游戏踢出 队列.都要用到循环数组.魔方阵之前有讲解,今天只说做游戏踢出队列. 这类问题有很多说法.现在我们说做游戏退出:有n个人,在一 ...

  9. 约瑟夫问题C语言加注释,用链表实现约瑟夫环【有注释,有很多注释】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 主要问题在于删除约瑟夫环的数,结果一直出不来,看了好几天改了好几次都改不对 #include #include typedef struct ysf { ...

最新文章

  1. python入门指南pdf-跟老齐学Python+从入门到精通 PDF 下载
  2. Py之scikit-learn:机器学习Sklearn库的简介、安装、使用方法(ML算法如何选择)、代码实现之详细攻略
  3. python万年历差农历程序_公历转农历的python实现
  4. BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
  5. Gym 102798A Golden Spirit
  6. C++静态成员和静态方法
  7. Oracle数据库常用undo查询思路
  8. pytorch Inception代码实现
  9. si4463 WDS生成文件和参数配置的关系
  10. ESP8266 WIFI 模块连接OneNet测试
  11. 数字信号处理--FFT与蝶形算法
  12. 刚装新系统环境mscorsvw.exe进程占用CPU资料50%以上的原因
  13. python 归一化使用
  14. 海康修改云存储服务器,ivms-4200云存储服务器
  15. BZOJ4200 洛谷2304 UOJ132:[NOI2015]小园丁与老司机——题解
  16. 图片轮播器——javascript
  17. Python——os库和shutil库的使用介绍
  18. 《2022 大数据技术与架构视频合集》附PPT和文档,限时下载
  19. couldnt resolve host name
  20. Go会否给Java带来冲击?

热门文章

  1. Revit建模中 构件视图隐藏怎么操作?
  2. EMV技术学习和研究(三)应用初始化读应用数据
  3. windows10 安装
  4. 百万调音师—Audition EQ均衡器
  5. 关于HMC5883L驱动书写及调试的总结
  6. java面试高频知识点汇总 2021-02-24
  7. android 壁纸软件 宝宝,宝宝巴士桌面软件下载
  8. DOM的readyState属性
  9. c语言在打开文件时会使用到的函数,C语言打开文件操作
  10. html旅游网站作品简介,旅游网站html模板