约瑟夫环c语言循环指针,约瑟夫环(c语言)(双循环、单循环)
/*题目:
耶稣又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语言)(双循环、单循环)相关推荐
- 约瑟夫环数据结构c语言程序,数据结构的C语言(类C语言)--单向循环链表--约瑟夫环...
代码区 约瑟夫环:用类C语言实现!!!可以成功运行!!!不是仅仅的算法,而是实实在在的类C #include #include typedef int ElemType; typedef struct ...
- 约瑟夫环c语言代码 指针,约瑟夫环C语言实现源代码(1)
前天笔试有个约瑟夫环的问题,怪不得人家没通知我面试,原来我的约瑟夫环做的确实有问题,昨天晚上又重新做了下,下面上源代码: /* file:osephu.cpp author:www.5dkx.com ...
- 循环列表实现约瑟夫环
1.作业需求 利用循环列表实现约瑟夫环 looplink.h来实现函数声明 #ifndef __LOOPLINK_H__ #define __LOOPLINK_H__ typedef int data ...
- # R语言——约瑟夫环
约瑟夫环: n个人围成一个圈,从第一个人点名,每数到第三个人,这个人移出圈外, 依次类推,求最后留下来的人编号是? 思路:每次循环重新编码序号作为names,并根据names 进行筛选 拓展:约瑟夫环 ...
- 程序员面试系列——约瑟夫环
约瑟夫斯问题(Josephus Problem) 约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为"约瑟夫环",也 ...
- 算法科普:什么是约瑟夫环
1 问题描述 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为 k 的人开始报数,数到 m 的那个人出圈:他的下一个人又从 1 开 ...
- 约瑟夫环Java实现
面试中可能经常会遇到约瑟夫环问题,逻辑上很简单,就是看怎么实现了,一般而言,最简单最直观的就是利用链表,然后构建一个循环结构,正好是环,最后计算出结果. 遍历环形链表会是一个无限循环,如果链表中的数据 ...
- 浙江高考VB之约瑟夫环
浙江信息技术Giao考之 "约瑟夫环" 在浙江信息技术高考中,有一种题型叫做 约瑟夫环题; 首先,约瑟夫环是什么东西? 鲜活的栗子: 我们现在有6个小朋友,分别标号为1 ~ 6.从 ...
- 7-28 猴子选大王 (20 分),从中学习约瑟夫环
一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数.如此不 ...
最新文章
- 专访 | 微软首席数据科学家谢梁:从经济学博士到爬坑机器学习,这十年我都经历了啥?
- 《精通Nginx》——2.8 完整的样本配置文件
- 干净架构在 Web 服务开发中的实践
- 元素 float:right 后右对齐换行原因
- python下sqlite增删查改方法(转)
- 服务器数据库2008怎么备份数据库文件,怎么备份SQL Server2008数据库
- 并行计算(一)——初步认识
- 【Flink】Direct buffer memory taskmanager.memory.task.off-heap.size
- 为何要进行软件维护?维护的种类及目标?
- 主仆模式的一点小理解
- Ansible详解(五)——Ansible其他模块使用详解
- Java开发笔记(一百三十)Swing的选择框
- 纯软件归档产品的好处
- ai怎么做盒子效果图_AI教程:打造一个逼真的包装盒
- 如何启用计算机安全模式,怎么进入电脑安全模式
- Windows7轻松升级至专业版、旗舰版
- 程序开发,也要匠心独运
- scratch 好玩的大鱼吃小鱼
- bd青鸟Java宠物商店2017
- 【推荐】万物兴歇——衰老与寿命的演化
热门文章
- 221114-华中科技大学学位论文利用Pandoc实现LaTex转Word
- 【docker系列】使用非root用户安装及启动docker(rootless模式运行)
- thinkphp设置excel表格的单元格边框颜色样式
- opencv 保存图片imwrite
- [日推荐]『准标商标查询』专注商标查询
- 【图像处理】QR二维码识别与生成matlab代码
- kswapd0占用CPU过高问题处理
- NHK Easy News 翻译 12月19日 第2章
- 微信小程序多选标签的实现(单选或者多选)
- 【情感打分+情感判定+词云图】python情感分析李子柒频道视频热门英文评论