少儿编程思维每日一练(20191124)

网友投稿 2019-11-23 13:50

[20191124] N个人在操场里围成一圈,将这N个人按顺时针方向从1到N编号,然后从第一个人起,每隔一个人让下一个人离开操场,显然,第一轮过后,具有偶数编号的人都离开了操场。依次做下去,直到操场只剩下一个人,记这个人的编号为J(N),例如,J(5)=3,J(10)=5,等等。则J(400)=?_________________。(提示:对N=2^m+r进行分析,其中0≤r<2m)(本题目选自第13届全国青少年信息学奥林匹克联赛(NOIP)初赛)

(自己先思考一下)

答案分界线

https://cdn.china-scratch.com/timg/191125/1350493508-0.jpg

答案思路:

从题目所给的提示我们可以推导出:

  • N = 2^m+r,其中m是指循环的轮数;

  • J(N) = 2*r + 1;

所以,如果有400个人,那么需要8轮才可以只余下一人(200、100、50、25、13、7、4、2、1),m为8。

r=400-2^8=144

因此:

J(400) = 2 * 144 + 1 = 289

此外,如果不使用推导公式的话,也可以直接手动,毕竟只需经过8次计算。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com