/*题目:

耶稣又15个门徒,其中有一个时出卖耶稣的叛徒,请用排除法找出这位门徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3.。。凡是报到“3”的退出圈子,最后留在圈子内的就是叛徒。找出他原来的序号。、

答案:第5个(后面有优化改进方法)

分析:

1、 先说思路,从第一个报数,引入一个计数count,报到3(就是count加到3)的标记位好人,并且让他下次循环不报数。而且count赋值0,继续报数,以此循环。因为报到第十五个人,需要继续从第1个再报数,因此外围还要有个循环,外围第循环用好人数来控制,当好人到15个的时候停止报数,这时最后一个,也就是第十五个好人就是叛徒,因此在标记好人的时候,加上一个pantu的记录,用来记录这个人的序号。最后一次记录的序号就是叛徒。

2、 一开始定义了个二维数组,想的是一个定义序号,一个定义是否是好人(0,1),后来想了想没必要,序列号直接下标就可以了。

*/

#import

int main()

{

int people[15] = {0};  // 定义数组15个人,下标+1就代表序号。元素0代表不知道是否是好人。当后面改为1的代表是好人。

int count = 0;         // 用来记报的数,循环时从1开始,数到3就归0.

int haoren = 0;        // 好人个数,报到3,好人就加一个

int pantu = 0;         // 叛徒,最后一个好人就是叛徒

for (; haoren <= 14;)   // 外循环,直到出现15个好人时停止循环

{

for (int i = 0; i <= 14; i++)  // 15个人从头报数

{

if (people[i] == 0)     // 如果不确定是好人,就报数

{

count ++;           // 只要有人报数就+1

if (count == 3)     // 报到3时,进行下面到操作

{

count = 0;      // 报到计数归0,后面到人继续从1报

people[i] = 1;  // 报3的人标记为好人,后面不再参与报数

haoren ++;      // 好人数加1

pantu = i+1;    // 叛徒暂时标记为最后这个报数的人(一开始没有+1,忘了下标是从0开始的)

}

}

}

}

printf("叛徒的序号是%d\n",pantu); // 打印出叛徒的序号,打印结果为5

return 0;

}

/*

我把代码又改进了一下,双循环改为一个循环。(建议先浏览第十题后再浏览本页代码)

*/

#import

int main()

{

int people[15] = {0};

int count = 0;

int haoren = 0;

int pantu = 0;

int i = 0;                          // 这一句要写到外面了。不能每次循环都从0开始。

for (; haoren <= 14;i ++ )      // 从此处改动,循环一直继续,直到出现第十五个好人结束。

{

if (people[i] == 0)

{

count ++;

if (count == 3)

{

count = 0;

people[i] = 1;

haoren ++;

pantu = i+1;

}

}

if (i == 14)                 // 报数到第十五个人,返回头再开始报数

{

i = -1;

}

}

printf("叛徒的序号是%d\n",pantu);

return 0;

}

约瑟夫环c语言循环指针,约瑟夫环(c语言)(双循环、单循环)相关推荐

  1. 约瑟夫环数据结构c语言程序,数据结构的C语言(类C语言)--单向循环链表--约瑟夫环...

    代码区 约瑟夫环:用类C语言实现!!!可以成功运行!!!不是仅仅的算法,而是实实在在的类C #include #include typedef int ElemType; typedef struct ...

  2. 约瑟夫环c语言代码 指针,约瑟夫环C语言实现源代码(1)

    前天笔试有个约瑟夫环的问题,怪不得人家没通知我面试,原来我的约瑟夫环做的确实有问题,昨天晚上又重新做了下,下面上源代码: /* file:osephu.cpp author:www.5dkx.com ...

  3. 循环列表实现约瑟夫环

    1.作业需求 利用循环列表实现约瑟夫环 looplink.h来实现函数声明 #ifndef __LOOPLINK_H__ #define __LOOPLINK_H__ typedef int data ...

  4. # R语言——约瑟夫环

    约瑟夫环: n个人围成一个圈,从第一个人点名,每数到第三个人,这个人移出圈外, 依次类推,求最后留下来的人编号是? 思路:每次循环重新编码序号作为names,并根据names 进行筛选 拓展:约瑟夫环 ...

  5. 程序员面试系列——约瑟夫环

    约瑟夫斯问题(Josephus Problem) 约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为"约瑟夫环",也 ...

  6. 算法科普:什么是约瑟夫环

    1 问题描述 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为 k 的人开始报数,数到 m 的那个人出圈:他的下一个人又从 1 开 ...

  7. 约瑟夫环Java实现

    面试中可能经常会遇到约瑟夫环问题,逻辑上很简单,就是看怎么实现了,一般而言,最简单最直观的就是利用链表,然后构建一个循环结构,正好是环,最后计算出结果. 遍历环形链表会是一个无限循环,如果链表中的数据 ...

  8. 浙江高考VB之约瑟夫环

    浙江信息技术Giao考之 "约瑟夫环" 在浙江信息技术高考中,有一种题型叫做 约瑟夫环题; 首先,约瑟夫环是什么东西? 鲜活的栗子: 我们现在有6个小朋友,分别标号为1 ~ 6.从 ...

  9. 7-28 猴子选大王 (20 分),从中学习约瑟夫环

    一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数.如此不 ...

最新文章

  1. 专访 | 微软首席数据科学家谢梁:从经济学博士到爬坑机器学习,这十年我都经历了啥?
  2. 《精通Nginx》——2.8 完整的样本配置文件
  3. 干净架构在 Web 服务开发中的实践
  4. 元素 float:right 后右对齐换行原因
  5. python下sqlite增删查改方法(转)
  6. 服务器数据库2008怎么备份数据库文件,怎么备份SQL Server2008数据库
  7. 并行计算(一)——初步认识
  8. 【Flink】Direct buffer memory taskmanager.memory.task.off-heap.size
  9. 为何要进行软件维护?维护的种类及目标?
  10. 主仆模式的一点小理解
  11. Ansible详解(五)——Ansible其他模块使用详解
  12. Java开发笔记(一百三十)Swing的选择框
  13. 纯软件归档产品的好处
  14. ai怎么做盒子效果图_AI教程:打造一个逼真的包装盒
  15. 如何启用计算机安全模式,怎么进入电脑安全模式
  16. Windows7轻松升级至专业版、旗舰版
  17. 程序开发,也要匠心独运
  18. scratch 好玩的大鱼吃小鱼
  19. bd青鸟Java宠物商店2017
  20. 【推荐】万物兴歇——衰老与寿命的演化

热门文章

  1. 221114-华中科技大学学位论文利用Pandoc实现LaTex转Word
  2. 【docker系列】使用非root用户安装及启动docker(rootless模式运行)
  3. thinkphp设置excel表格的单元格边框颜色样式
  4. opencv 保存图片imwrite
  5. [日推荐]『准标商标查询』专注商标查询
  6. 【图像处理】QR二维码识别与生成matlab代码
  7. kswapd0占用CPU过高问题处理
  8. NHK Easy News 翻译 12月19日 第2章
  9. 微信小程序多选标签的实现(单选或者多选)
  10. 【情感打分+情感判定+词云图】python情感分析李子柒频道视频热门英文评论