本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2023-09-24 15:49:12
题目大意
A 题 链接
C 题 链接
在本比赛 A 题的基础上,查找第 $n$ 个符合要求的数。
模拟
根据题目我们可以找到一个暴力方法就是从头开始枚举,直到找到 $n$ 个(这样肯定会超时)。
例如 $977654321$ 这个数一定是不符合要求的,但是此时如果从个位一点点加起会稍好很多时间。所以可以看到在这个数的第二位开始就已经能判断出它不符合要求,所以我们可以用一个数组按位存储要判断的数,然后找到第一个不合法的位数,从那一位开始修改。
代码:
#include<bits\/stdc++.h>
using namespace std;
int a[15];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
int cnt=1;
a[1]=1;
int sum=0;
while(sum<n){
int flag=0;
for(int i=1;i<cnt;i++){
if(a[i]>=a[i+1]) {
flag=i;
break;
}
}
if(flag) {
a[flag]++;
for(int i=1;i<flag;i++) a[i]=0;
while(a[flag]>=10) {
a[flag]-=10;
a[++flag]++;
cnt=max(cnt,flag);
}
continue;
}
else {
sum++;
if(sum==n) break;
flag=1;
a[1]++;
while(a[flag]>=10) {
a[flag]-=10;
a[++flag]++;
cnt=max(cnt,flag);
}
}
}
for(int i=cnt;i>=1;i--) cout<<a[i];
return 0;
}
AC截图


鲁ICP备2025150228号