c语言报数问题程序,转圈报数问题(C语言):有n个人围成一圈,顺序排号……...

问题描述:

有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位。

题目分析:

这道题目是我们在日常生活中也能经常见到的一种报数小游戏。首先我们先分析一下游戏的核心——轮流报数 这个过程的本质是什么呢?我们分析一下游戏的过程。

我们先举一个实例:假如有5个人 分别为ABCDE

第一轮:A报1 B报2 C报3(被淘汰) D报1 E报2

第二轮:A报3(被淘汰)B报1 C(已被淘汰)D报2 E报3(淘汰)

第三轮:A(已被淘汰)B报1 C(已被淘汰)D报2 E(已被淘汰)

第四轮:A(已被淘汰)B报3(被淘汰)仅剩一人游戏结束 D获胜

总结一下就是:游戏开始,所有人依次报数,报到三的都退出。所有剩下的人继续报数。一轮结束后 第一个人接着上一轮继续报数,以此类推,直到只剩下一个人。

那么主要的动作有两个:

不断重复地1~3报数 但要跳过已被淘汰的人 且 一轮结束后 继续接着上一轮的结尾的数字

将报到3的人移出

那么如何用C语言实现这两点呢?

第二个很好解决 我们就用最简单的建立对应长度的数组 用1表示仍在场上 0表示已被淘汰。

第一个过程想要用C语言来实现就要模拟出不断1~3的循环 而且还能够不间断的在不同轮间衔接。

这样乍一看没有任何思路。那么怎么样能将问题简化一下,更加直观的表达出来呢?

1~3循环报数,报到3的淘汰的本质和从1开始报数,报到三的倍数淘汰的本质是一样的:

1 2 3(淘汰)1 2 3(淘汰

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值