题目:
题目描述
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。请写一个程序,求出最后会剩下的人的编号。
输入
输入只有一行,为两个整数n,m(0<n,m<10^8)。
输出
只有一行,一个数,为剩下最后一个人的编号
样例输入
6 5
样例输出
1
我的代码:
#include <bits/stdc++.h>
using namespace std;
int a[10000005];
int main()
{
int n,m;
cin >> n >> m;
int count = 0,k = -1;
while (count < n - 1)
{
int i = 0;
while (i < m)
{
k = (k + 1) % n;
if (a[k] == 0)
{
i++;
if (i == m) a[k] = -1,count++;
}
}
}
for (int i = 0;i < n;i++)
{
if (a[i] == 0)
{
cout << i + 1;
break;
}
}
}
2个RE5个TLE4个AC
数组可能开小了但是再多加个0就直接全RE
这题数据很大,求调(验证码nb83