有N个小朋友围成一圈玩击鼓传花游戏,将小朋友编号为1-N,从1号开始传花,每次传3个,拿到花的小朋友表演节目后退出。任给N,问最后一个表演的小朋友编号是多少?例如:输入5,从1号开始传花,第一个表演的是3号,第二个表演的是1号,第三个表演的是5号,第四个表演的是2号,最后一个表演的是4号。
代码
#include <cstdio>
#include <queue>
using namespace std;
int main() {
queue<int> kid;
int n;
scanf_s("%d", &n);
for (int i = 0; i < n; ++i) {
kid.push(i + 1);
}
int num = 1;
while (true) {
int cur = kid.front();
kid.pop();
if (num == 3) {
num = 1;
if (kid.empty()) {
printf("%d\n", cur);
break;
}
else {
printf("%d ", cur);
}
}
else {
num++;
kid.push(cur);
}
}
printf("最后表演的小朋友编号为:");
printf("%d\n", kid.front());
}
运行结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/29445d47e76761d80b11423f49ffb3f4.png)