最新消息:

约瑟夫问题_学生围成圈,数到3退出的问题

C/C++ 大步 1313浏览 0评论

c语言 约瑟夫问题 学生围成圈 数 3退出 问题

约瑟夫问题      c语言实现

描述

n个人想玩残酷的死亡游戏,游戏规则如下:

n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出最后一个人的编号。

也有的说成是有N个学生围成一圈,从第一个人开始报数(1到3报数),凡报到3的人退出圈子,问最后剩下人的是原来第几号?

 

 

关键是对于踢出的学生的处理,因为如果是直接删除的话,链表处理可能更好,也更易于理解。上面的方法是直接用数组实现的。

上面的方法中有人容易犯一种错误,就是将

 

这句写成

这导致如果人数是3,4,结果都正确,5以上都输出0 这样错误的结果。这是因为,我们忽略了,当最后剩下两个学生的时候,他们的序列号不是相邻的,所以一旦其中一个序号清0了,执行i++,指向下一个学生的序号,这样自然输出为0了。所以,正确 的方法是,把学生里面的数3的学生序号全部清0后,在用一个循环,找到序号不是0的,则就是我们要的结果。

 

下面附上链接的写法:

 c语言  约瑟夫问题 学生围成圈 数 3退出 问题

转载请注明:大步's Blog » 约瑟夫问题_学生围成圈,数到3退出的问题

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
SiteMap