约瑟夫问题
Time Limit: 1000MSMemory Limit: 65536KB
Problem Description
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
Input
输入n和m值。
Output
输出胜利者的编号。
Example Input
5 3
Example Output
4
Hint
第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀
#include<stdio.h>
int main()
{
int n,m,re_n,i,count;
scanf("%d %d",&n,&m);
int peo[n];
for(i=0;i<n;i++)
peo[i]=1;
re_n=n;//报数前圈子里的人数
i=n-1;//报数的为下一个人
while(re_n>1)
{
count=0;
while(count<m)
{
i=(i+1)%n;
if(peo[i])
count++;
}
re_n--;//报m的人出局,人数减一
peo[i]=0;
}
for(i=0;i<n;i++)
{
if(peo[i])
{
printf("%d\n",i+1);
break;
}
}
return 0;
}