统计一下每种数位的数量,存在数组里,然后再来找就可以了,萌新代码比较难看,欢迎支持提建议
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
int per = 0, num = 0, yu = 0;//统计每个数的数位,m位置的数位,从第一个num数位的数字到m的距离
cin >> n >> m;
int a[100] = {0};//保存每种数位的数量
for (int i = 0; i <= n; i++) //先全部统计一下
{
int t = i;
per = 0;
while (t) {
per += t % 10;
t /= 10;
}
a[per]++;
}
int locate = 0;
for (int i = 1; i < 100; i++) //找一下m位置数字的数位和yu
{
locate += a[i];
if (locate >= m) {
yu = m - locate + a[i] + 1;
num = i;
break;
}
}
for (int i = 1; i <= n; i++)//用上面求得两个数来找m位置的数
{
int t = i;
per = 0;
while (t) {
per += t % 10;
t /= 10;
}
if (per == num)
yu--;
if (yu == 1) {
cout << i;
break;
}
}
}