约瑟夫问题 数组模拟
1033: 约瑟夫问题
时间限制: 1 Sec 内存限制: 128 MB
题目描述
设有N名同学手拉手围成一圈,自1、2、3、…开始编号,现从1号开始连续数数,
每数到M将此同学从圈中拉走, 求最后被拉走的同学的编号
输入
两个正整数,分别为N和M。0<N<=100 ;0<M<65535
输出
一个正整数,为最后被拉走的同学的编号,最后输出回车
样例输入
100 10
样例输出
26
数组模拟
#include <iostream>
#include <algorithm>
using namespace std;
int a[105];
int n,m,t,mm,i=1,ans;
int main()
{
cin>>n>>m;
for(int i=1;i<=100;++i)a[i]=i;
t=n;
while(t--){
mm=m;
while(1)
{
if(a[i]!=0)mm--;
if(mm==0)break;
i++;
if(i==n+1)i=1;
}
if(t==0)cout<<a[i];
a[i]=0;
i++;
if(i==n+1)i=1;
}
return 0;
}