有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()); } 运行结果: