欢迎来到天天文库
浏览记录
ID:39623763
大小:2.03 MB
页数:13页
时间:2019-07-07
《约瑟夫环问题[Josephus]》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、问题描述已知n(<2^15)个人(以编号1,2,…,n分别表示)围坐在一圆桌上,从编号为k(1≤k≤n)的人开始报数,数到m的那个人出列,他的下一个人又从1开始报数,数到m的那个人又出列,依此重复,直到圆桌周围的人全部出列,依次输出最后三个出列的序号。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.输入格式:第一行为一个整数T(<2^15)表示测试
2、次数,接着第二到T+1行分别为n,m和k的值。例:21023输出格式:T行最后min(n,3)个出列的编号。结果:615Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.问题背景这个问题是以弗拉维奥•约瑟夫斯命名的,它是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽
3、签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.n=12;k=4;m=3出列Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright
4、2004-2011AsposePtyLtd.n=12;k=4;m=3出列Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.解题方法思路:将n个人分别用
5、1,2…,n表示,并存放于一个数组中,将出列的人的号码从数组中删除,并输出最后三个出列的号码。关键:(1)从第k个人开始报数,而非第一个人开始。(2)当报到第n个人时,编号为1的人继续往下报数。(3)显示出最后三个出列的人的编号。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.Josephusjp=newJosephus();inta[]=newi
6、nt[n];for(inti=0;i7、tyLtd.publicvoidSortArray(int[]a,intn,intm,intk,intg){int[]b=newint[n];intc=0;inti=k-2;while(true){for(intj=0;j8、i];a[i]=0;c++;if(c==n)break;}System.out.print(“最后出列的3人:");this.show(b,g);}}Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.数据测试1.数据选择:要求:n<2^15;1<=k<=n;2.数据和结果显示:总人数n5起始号码k2循环数m2最后出列的
7、tyLtd.publicvoidSortArray(int[]a,intn,intm,intk,intg){int[]b=newint[n];intc=0;inti=k-2;while(true){for(intj=0;j8、i];a[i]=0;c++;if(c==n)break;}System.out.print(“最后出列的3人:");this.show(b,g);}}Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.数据测试1.数据选择:要求:n<2^15;1<=k<=n;2.数据和结果显示:总人数n5起始号码k2循环数m2最后出列的
8、i];a[i]=0;c++;if(c==n)break;}System.out.print(“最后出列的3人:");this.show(b,g);}}Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2004-2011AsposePtyLtd.数据测试1.数据选择:要求:n<2^15;1<=k<=n;2.数据和结果显示:总人数n5起始号码k2循环数m2最后出列的
此文档下载收益归作者所有