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;
			}
		}
	}
}