【正经题解】
2025-07-12 16:09:07
发布于:浙江
46阅读
0回复
0点赞
本题主要考察队列的基本操作。
首先我们先根据题目创建一个队列queue<int> a,并按题目要求向队列里添加元素,既从1开始依次递增的等差数列:
void slove(int n){
for(int i=1;i<=n;i++){
a.push(i);
}
}
接下来,可以看出我们是不知道一共要报几次数的,所以我们用while循环。条件就是判断该队列是否为空。既while(a.size()!=0),并创建一个变量i用于模拟报数。然后先不要着急,我们先按照题目要求写一个判断函数,我们需要判断当前这个i是否为5的倍数或其中是否含有5:
bool is_if(int i){
string n=to_string(i);
bool m=false;
for(int i=0;i<=n.size()-1;i++){
if(n[i]=='5'){
m=true;
break;
}
}
return (m or i%5==0);
}
之后我们要模拟一下淘汰出圈的过程,既输出队首元素并出队(注意要带一个空格):
if(is_if(i)){
cout << a.front()<<" ";
a.pop();
}
最后还有一点,就是要模拟依次报数这个过程。就是出队后在入队即可:
else{
a.push(a.front());
a.pop();
}
完整代码(注意模拟报数的i要加一):
#include <bits/stdc++.h>
using namespace std;
queue<int> a;
void slove(int n){
for(int i=1;i<=n;i++){
a.push(i);
}
}
bool is_if(int i){
string n=to_string(i);
bool m=false;
for(int i=0;i<=n.size()-1;i++){
if(n[i]=='5'){
m=true;
break;
}
}
return (m or i%5==0);
}
int main(){
int n;
cin >> n;
slove(n);int i=1;
while(a.size()!=0){
if(is_if(i)){
cout << a.front()<<" ";
a.pop();
}else{
a.push(a.front());
a.pop();
}i++;
}
return 0;
}
时间复杂度:其中是因为每个数至少会被处理n次。而d是指数的位数。
全部评论 1
666,这道题适合普及-,像我这样的入门新手根本不会,想了1小时没想对
想知道哪里错了,干红温了#include<bits/stdc++.h> using namespace std; int a[1000]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100},b[1000],c[1000]; int a1,b1=0,c1=0; bool _(int _78[1000]) { for(int i=0;i<b1;i++) { if(b[i]==a[a1]) { return 0; } } return 1; } bool m(int k) { while(k) { if(k%10==5) return 1; k/=10; } return 0; } int main() { int n; cin>>n; while(1) { int flag=0; for(int i=0;i<n;i++) { a1=i; if(_(b)) c[c1]=a[i],c1++; } while(1) { for(int i=0;i<c1;i++) { int ans=c[i]; if(a[i]%5==0||m(ans)) { b[b1]=c[i]; b1++; flag=1; break; } } if(flag) break; } if(c[0]==0) break; } for(int i=0;i<b1;i++) { cout<<b[i]<<" "; } }6天前 来自 辽宁
0
这个长度对我来说很难了6天前 来自 辽宁
0所以你的思路是什么
6天前 来自 浙江
0虾打
6天前 来自 辽宁
0













有帮助,赞一个