小标
2018-12-03
来源 :
阅读 1515
评论 0
摘要:本文主要向大家介绍了C/C++知识点之C语言用数组解决约瑟夫环问题,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C语言用数组解决约瑟夫环问题,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,大家决定宁愿自杀也不要被敌人抓到,于是确定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而约瑟夫和他的朋友并不想死去,那么他应该怎样安排他和他的朋友的位置,才能逃脱这场死亡游戏呢? 用C语言解决约瑟夫环问题的最佳方式是采用循环链表,但使用数组同样也可以解决瑟夫环的问题。采用循环链表的方法,以后详述。本节主要讲解如何用数组的方式解决约瑟夫环的问题。 程序如下所述: #include
void main(){
int a[LEN];
for(int i=0;i<LEN;i++){a[i] = 1;} // 数组初始化,1:表示为活着;0:表示自杀
int leftCount = LEN; // 计数器leftCount:计数剩下的人
int index = 0,count = 0; // 1.数组下标index;2.循环计数器count
while(leftCount>2){ // 当还剩下两个人结束
if(a[index] == 1){
count++;
if(3 == count){ // 计数到3,1.自杀;2.循环计数器count重新开始计数;3.计数器leftCount减1
a[index] = 0;
count = 0;
leftCount--;
}
}
index++;
if(index == LEN){index = 0;} // 当到数组尾,数组下标index置零,重新开始
}
for(int j=0;j<LEN;j++){ // 输出结果
if(1 == a[j]){ printf("剩下两个人为第%d个\n",j+1); }
}
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号