【算法分析】
本题是约瑟夫环的变形,使用队列来模拟。但要注意读入数据比较大,要使用scanf输入。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
int n, a[1000050], cnt, m;
int main()
{
cin >> n;
queue <int> q;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
q.push(i);
}
m = a[1]; // 第一个要求的数其实就是a[1]
while (q.size() != 1) {
++cnt; // 报数
int x = q.front();
q.pop();
if (cnt != m) q.push(x); // 若没到要求的数,则入队,继续报数
else { // 同循环队列
cnt = 0;
m = a[q.front()]; // 出队,并更换m
}
}
cout << q.front() << endl;
return 0;
}