早教吧作业答案频道 -->其他-->
约瑟夫(Josephus)问题n个人围坐成一圈,从1开始顺序编号;游戏开始,从第一个人开始由1到m循环报数,报到m的人退出圈外,问最后留下的那个人原来的序号。分析]本题首先要
题目详情
约瑟夫(Josephus)问题
n 个人围坐成一圈,从 1 开始顺序编号;游戏开始,从第一个人开始由 1 到 m 循环报数,
报到 m 的人退出圈外,问最后留下的那个人原来的序号。
【分析]】本题首先要定义一个数组,其元素个数为n。n定义为常变量,以便定义数组。 数组元素的值标识该人是否出局,1在圈内,0出局。
值为0的元素不参加报数。可用一个整型数k做计数器,采用倒计数,记录留下的人数。
【提示】数组是线性排列的,而人是围成圈的,用数组表示要有一种从数组尾部跳到其头部的技巧,即下标加1除以n求余数。
n 个人围坐成一圈,从 1 开始顺序编号;游戏开始,从第一个人开始由 1 到 m 循环报数,
报到 m 的人退出圈外,问最后留下的那个人原来的序号。
【分析]】本题首先要定义一个数组,其元素个数为n。n定义为常变量,以便定义数组。 数组元素的值标识该人是否出局,1在圈内,0出局。
值为0的元素不参加报数。可用一个整型数k做计数器,采用倒计数,记录留下的人数。
【提示】数组是线性排列的,而人是围成圈的,用数组表示要有一种从数组尾部跳到其头部的技巧,即下标加1除以n求余数。
▼优质解答
答案和解析
在这里我们就假设n=41,m=3嘛!
那么程序就可以这样写:
#include
#include
int main()
{
int arr[41],i,count=0,sum=0;//定义一个数组arr[41];count用来记录报数的编号;sum用来记录已经被杀的总人数
for(i=0;i<41;i++)
{
arr[i]=i+1;//给在场的41个人进行编号
printf("%-4d",arr[i]);//输出这41个人的编号
}
while((41-sum)/3!=0)//当还存活得人还剩下两个时就停止
{
for(i=0;i<41;i++)
{
if(arr[i]!=0)
{
count++;
if(count==3)
{
arr[i]=0;//把已自杀的人的编号设为0
count=0;
sum++;
}
}
}
i=0;//将i清零,以便进行下一次的循环
}
printf("\n请输出幸存者的编号:");
for(i=0;i<41;i++)
{
if(arr[i]!=0)
printf("%-3d",arr[i]);
}
getch();
return 0;
}
那么程序就可以这样写:
#include
#include
int main()
{
int arr[41],i,count=0,sum=0;//定义一个数组arr[41];count用来记录报数的编号;sum用来记录已经被杀的总人数
for(i=0;i<41;i++)
{
arr[i]=i+1;//给在场的41个人进行编号
printf("%-4d",arr[i]);//输出这41个人的编号
}
while((41-sum)/3!=0)//当还存活得人还剩下两个时就停止
{
for(i=0;i<41;i++)
{
if(arr[i]!=0)
{
count++;
if(count==3)
{
arr[i]=0;//把已自杀的人的编号设为0
count=0;
sum++;
}
}
}
i=0;//将i清零,以便进行下一次的循环
}
printf("\n请输出幸存者的编号:");
for(i=0;i<41;i++)
{
if(arr[i]!=0)
printf("%-3d",arr[i]);
}
getch();
return 0;
}
看了约瑟夫(Josephus)问题...的网友还看了以下:
游船顺流而下,每小时前进7公里,逆流而上,每小时前进5公里.两条游船同时从同一个地方出发,一条顺水 2020-05-13 …
黄河流经的地区按上游至下游的顺序排列青藏高原、华北平原、黄土高原、内蒙古高原按该顺序顺序排列 2020-06-08 …
同学们做游戏,9个同学坐成一团,并按顺时针次序编上座号:1、2、3、4、5、6、7、8、9号,先从 2020-06-18 …
游艇沿着笔直的河匀速逆流航行,经过某座桥时丢失了一个救生圈,丢失后经过时间t才发现,于是游艇立即返 2020-07-04 …
游船顺流而下,每小时前进7公里,逆流而上,每小时前进5公里.两条游船同时从同一个地方出发,一条顺水 2020-07-11 …
文章的叙述顺序有哪些?叔叔阿姨快来吧!我是一名小学生,老师常说:有事情发展顺序,时间顺序,方位顺序 2020-07-25 …
(2008•张家界)明明一家准备假期游览黄石寨(H)、天门山(T)、五雷山(W)三个景区,他用摸牌的 2020-11-12 …
某游船先顺流而下,然后逆流返回.已知水流速度是3km/h,游船在静水中的速度是18km/h.为使游船 2020-11-24 …
6个小朋友围成一圈做游戏.6个小朋友围成一圈在做游戏.从小海开始,由小安,小成,小东,小南,小萍按顺 2020-12-17 …
什么叫游览顺序?能下个定义吗?《鸟的天堂》是游览顺序还是时间顺序? 2021-01-09 …