约瑟夫问题 数组模拟

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;
}


posted @ 2022-11-17 23:04  林动  阅读(14)  评论(0编辑  收藏  举报