牛客 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;
}
posted @ 2024-04-16 16:46  MsEEi  阅读(7)  评论(0)    收藏  举报