约瑟夫问题求解

终于又到了大名鼎鼎的约瑟夫问题了。
约瑟夫问题也算是近代比较知名的一个算法问题了,有着成熟的算法,其中有着强行模拟,还存在着一些神奇的数学方法,哈哈。今天我又来了强行模拟。

啊,啊,啊。
瞎。
下面是问题的描述:
题目描述 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;

}

} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值