题解
2026-05-27 21:26:21
发布于:湖南
1阅读
0回复
0点赞
题意
有 个人围成一圈,编号 ,从 开始依次报数。
淘汰规则:报出的数字满足任一条件就被淘汰:
是 5 的倍数
数字中包含 5
要求按淘汰顺序输出所有人的编号。
思路
1.淘汰判断函数
写 函数:检查数字 中是否包含 ,包含返回 。
2.初始化队列
把 的编号依次加入队列,模拟围成一圈的人。
3.循环报数 + 淘汰
用 idx 记录当前报的数字:
如果满足淘汰条件(5 的倍数 或 含 5):输出队首编号(淘汰),并弹出队首;
否则:把队首移到队尾(继续排队);
每轮报数后 idx++。
4.输出结果
直到队列为空,按顺序输出所有被淘汰的编号。
完整代码
#include <bits/stdc++.h>
using namespace std;
queue<int> q;
bool flag(int n) {
while (n != 0) {
if (n % 10 == 5) return true;
n /= 10;
}
return false;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) q.push(i);
int idx = 1;
while (q.size() != 0) {
if (idx % 5 == 0 || flag(idx)) {
cout << q.front() << " ";
q.pop();
}
else {
q.push(q.front());
q.pop();
}
idx ++;
}
return 0;
}

这里空空如也








有帮助,赞一个