牛客 C. 牛客小白月赛90
C
小A给定一个数字 \(n\) ,请你帮她找出从低位对齐后任意一位均与 \(n\) 对应数位不同的最小正整数。
对于本题题面描述中的从低位对齐后任意一位均与 \(n\) 对应数位不同,你需要保证你所输出的答案的位数小于 \(n\) 的位数时,即使在添加前导零至与 \(n\) 的位数相同后,也不应有任意一位的数字两两相同。
题解
WA了三次才ac
对特殊情况的判断卡了好久才想出来
#include <bits/stdc++.h>
using namespace std;
int T;
bool st[20];
int main()
{
scanf("%d", &T);
string a;
while (T -- )
{
vector<int> A, B;
A.clear();
B.clear();
cin >> a;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
for (int i = 0; i < A.size(); i ++ )
{
if (A.size() != 1)
{
for (int j = 0; j <= 9; j ++ )
{
if (A[i] != j)
{
B.push_back(j);
//cout << j << endl;
break;
if (A[i] == 1) st[i] = true;
}
}
}
else
{
for (int j = 1; j <= 9; j ++ )
{
if (A[i] != j);
{
B.push_back(j);
break;
}
}
}
}
while (B.size() > 1 && B.back() == 0) B.pop_back();
if (B.size() == 1 && B[0] == 0 && A[0] == 1) B[0] = 2;
for (int i = 2; i <= 9; i ++) if (B.size() == 1 && B[0] == 0 && A[0] == i) B[0] = 1;
for (int i = B.size() - 1; i >= 0; i -- ) printf("%d", B[i]);
cout << endl;
}
return 0;
}