只有两个测试点 WA 了,求助。谢谢。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// 计算一个数的位数
ll digitCount(ll number) {
ll count = 0;
while (number > 0) {
count++;
number /= 10;
}
return count;
}
// 生成第1类好数
ll generateType1GoodNumber(ll x, ll digitLength) {
for (int digit = 0; digit <= 9; ++digit) {
ll candidate = 0;
for (int pos = 1; pos <= digitLength; ++pos) {
candidate = candidate * 10 + digit;
}
if (candidate >= x) {
return candidate;
}
}
return -1; // 这行代码理论上不会执行
}
// 生成第2类好数
ll generateType2GoodNumber(ll x, ll digitLength) {
ll minGoodNumber = LLONG_MAX;
for (int uniqueDigit = 0; uniqueDigit <= 9; ++uniqueDigit) {
for (int sameDigit = 0; sameDigit <= 9; ++sameDigit) {
if (uniqueDigit == sameDigit) continue; // 忽略相同的数字
for (int uniquePosition = 1; uniquePosition <= digitLength; ++uniquePosition) {
if (uniqueDigit == 0 && uniquePosition == 1) continue; // 避免前导零
ll candidate = 0;
for (int pos = 1; pos < uniquePosition; ++pos) {
candidate = candidate * 10 + sameDigit;
}
candidate = candidate * 10 + uniqueDigit;
for (int pos = uniquePosition + 1; pos <= digitLength; ++pos) {
candidate = candidate * 10 + sameDigit;
}
if (candidate >= x) {
minGoodNumber = min(minGoodNumber, candidate);
}
}
}
}
return minGoodNumber;
}
int main() {
ll x, k;
cin >> x >> k;
ll digitLength = digitCount(x);
if (k == 0) {
cout << generateType1GoodNumber(x, digitLength);
} else {
cout << generateType2GoodNumber(x, digitLength);
}
return 0;
}