圆圈循环报数

1.问题提出
有100个小朋友按编号顺序1,2,。。。,100逆时针方向围成一圈。从1号开始逆时针方向1,2,。。。,9报数,凡报数9者出列(显然,第一个出圈为编号9者)。
最后剩下一个未出圈者的编号是多少?第50个出圈者的编号是多少?

 

2.设计要点
圆圈循环报数问题称为Joseph问题。我们考虑一般问题:有n个小朋友按编号顺序1,2,。。。,n逆时针方向围成一圈。从1号开始按逆时针1,2,。。。,m报数,凡报数m者出列。
求最后剩下一个未出圈者的编号与指定第p个出圈者的编号。
设置数组a(n),每一数组元素赋初值1,每报一人,和变量s增1。当加a(i)后和变量s的值为m时,a(i)=0,标志编程为i者出圈,设置ln统计出圈人数。同时,s=0并重新逆时针方向后报数累加。
当出圈人数ln为指定的p时,x=i,x即为第p个出圈者的编号。
当出圈人数ln达到n-1时,即未出圈者只剩1人,终止报数,打印最后剩下者的编号。

 

3.代码实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值