本文主要是介绍牛客小白月赛90 小A的数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
小A给定一个数字 n ,请你帮她找出从低位对齐后任意一位均与 n 对应数位不同的最小正整数。
对于本题题面描述中的从低位对齐后任意一位均与 n 对应数位不同,你需要保证你所输出的答案的位数小于 n 的位数时,即使在添加前导零至与 n 的位数相同后,也不应有任意一位的数字两两相同。
输入描述:
多组测试。第一行一个正整数 T (1≤T≤103),表示测试数据组数。
对于每组测试数据,一行一个不含前导零的整数 n(2≤n≤109)n (2 ≤ n ≤ 10^9) ,表示所给的数字。
输出描述:
对于每组测试,输出一行一个正整数表示答案。
示例1
输入
3 2 10 101
输出
1 1 10
思路:
此题分情况讨论,我们可以发现最好的情况就是0和1,
通过第一个样例2可以看出只有一位不可以是0所以是1
第二个样例是10 ---> 转换后是01 去掉前导0是1
第三个样例是101 ---> 转换后010 去掉前导0是1题意就是按位寻找比此位小的数
代码思路:
先去用字符串输入,然后把0转化1 大于1的转化0
然后转换成整型再去转化
AC代码:
#include<iostream>
#include<vector>using namespace std;int main()
{int t;cin >> t;string s;while(t--){cin >> s;int len = s.size();string ans = "";vector<int> v(len);for(int i=0;i<len;i++){v[i] = s[i] - '0';if(v[i] != 0){ans += '0';}else{ans += '1';}}int num = 0;int i = 0;while(i < len){int now = ans[i] - '0';num = num * 10 + now;i = i + 1;if(i == len){if(num == 0){if(v[i-1] != 1){num = 1;}else{num = 2;}}}}cout << num << endl;}return 0;
}
这篇关于牛客小白月赛90 小A的数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!