翻译
给两个数 n n n 和 k k k 。
接下来有 k k k 个数,表示要往下数几个小孩
每次从当领导的人往下数若干次,被数到的人出局,再由出局的下一个人当领导。
输出前 k k k 个出局的人的编号。
思路
刚看到这道题第一反应是有点像 P1996约瑟夫问题。可以运用队列来解决这道题。先取膜,再循环。
知识点
#include<queue>
//头文件
queue<int>a;//定义一个叫a的int队列
a.push(1)//1进队
a.pop()//弹出队首
a.front()//a队首的项
a.size()//a的长度
代码
#include<bits/stdc++.h>
using namespace std;
int n,k;
int main() {
scanf("%d%d",&n,&k);
int p[101];
for(int i = 1;i <= k;i++) {
scanf("%d",&p[i]);
}
queue<int>child;
for(int i = 1;i <= n;i++) {
child.push(i);//全部进列
}
for(int i = 1;i <= k;i++) {
p[i] %= child.size();//避免循环次数过多
for(int j = 1;j <= p[i];j++) {
child.push(child.front());
child.pop();
}
printf("%d ",child.front());
child.pop();//出列
}
}