2021牛客OI赛前集训营-普及组(第一场)优美的数 题解
前言
不管怎么说,第一题就是送分题,后面的题都是毒瘤题。
我这个代码就是不一样,最快!
解决思路
比较简单,他要你输出第n个数,那么你就从7慢慢开始往上枚举(因为7是第一个优美数)
下面给出检查这个数是否为优美数的代码
bool check(int i){
if(i%7==0) return 1;
int t=i;
while(t){
int w=t%10;
if(w==7){
return 1;
}
t/=10;
}
return 0;
}
总体代码
就比较简单了
#include<bits/stdc++.h>
using namespace std;
int n;
int T;
int Read(){
char c=' ';
int f=1;
while(c<'0'||c>'9'){
if(c=='-'){
f=-1;
}
c=getchar();
}
int x=0;
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
void wr(int x){
if(x<0){
printf("-");
x=-x;
}
if(x>9) wr(x/10);
putchar(x%10+'0');
}
bool check(int i){
if(i%7==0) return 1;
int t=i;
while(t){
int w=t%10;
if(w==7){
return 1;
}
t/=10;
}
return 0;
}
int main(){
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
cin>>T;
while(T--){
n=Read();//cout<<check(17)<<endl;
int l=0;
for(int i=7;i<=10000005;i++){//10000005这个随你自己而定,我脸比较黑,10000005就AC
if(check(i)){
l++;//看到一个优美数,计数器加1
}
if(l==n){//如果你的优美数个数已经达到了n,那么输出你现在的这个优美数
wr(i);
putchar('\n');
break;
}
}
}
}