约瑟夫问题
Time Limit: 1000MS
Memory 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被杀
Author
#include<iostream>
using namespace std;
int main()
{
int N;//人的总个数
int M,count=0;//间隔多少个人
int p[102];
cin>>N;
cin>>M;
for(int i=1;i<=N;i++)
p[i]=1;
for(int i=1,j=0;;i++)
{
if(p[i]==1)
{
j++;
if(j==M)
{
p[i]=0;
j=0;
count++;
}
if(count==N)
{
cout<<i;break;
}
}
if(i==N)
i=0;
}
}
#include<iostream>
using namespace std;
int main()
{
int N;//人的总个数
int M;//间隔多少个人
cin>>N;
cin>>M;
int result=0;//N=1情况
for (int i=2; i<=N; i++)
{
result=(result+M)%i;
}
cout<<"最后自杀的人是:"<<result+1<<endl;//result要加1
return 0;
}