终于又到了大名鼎鼎的约瑟夫问题了。
约瑟夫问题也算是近代比较知名的一个算法问题了,有着成熟的算法,其中有着强行模拟,还存在着一些神奇的数学方法,哈哈。今天我又来了强行模拟。
啊,啊,啊。
瞎。
下面是问题的描述:
题目描述 Description
一个旅行社要从n名旅客中选出一名幸运旅客,为他提供免费环球旅行服务。方法是,大家站成一个圈,然后选定m,从第一个人开始报数1,2,3………,报到m的人退出圈外,然后从下一个人开始重新从1报数,重复这个过程,直到只剩下一个人时,此人就是幸运之星。
输入描述 Input Description
屏幕输入n m
输出描述 Output Description
屏幕输出 打印退出圈外的人的序号
(幸运者号码)
样例输入 Sample Input
6 4
样例输出 Sample Output
4 2 1 3 6
5
下面附上完整代码:
qaq。
#include<iostream>
using namespace std;
int main(){
int n,m,a[10001],i,love=0;
cin>>n>>m;
a[0]=0;
for(i=1;i<=n+1;i++)
a[i]=1;
int ans;
for(i=0;i<n-1;i++){
ans=0;
for(;ans<m;love++){
ans+=a[love];
if(love==n)
love=0;
}
love--;
if(love==0)
love=n;
cout<<love<<" ";
a[love]=0;
}
cout<<endl;
for(i=1;i<=n;i++)
if(a[i]==1){
cout<<i;
return 0;
}
}