专栏文章

题解:P13729 【MGVOI R1-A】超级奇数(odd)

P13729题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioau0kl
此快照首次捕获于
2025/12/02 16:11
3 个月前
此快照最后确认于
2025/12/02 16:11
3 个月前
查看原文

题意

给你 TT 个正整数 aa,要加上一个的正整数 bb,使其 a+ba+b 成为超级奇数,问你最小的 bb 是多少?
超级奇数的定义
对于一个正整数,如果其中的每一位都是奇数,则定义它是一个超级奇数。

思路

因为每一个数 aa 都较大,所以依次从 aa 往上加,一个一个数的尝试,是不行的。
所以本题考虑贪心,因为这个数的位数较少,所以我们可以从最高位到最低位依次遍历。找到第一位不是奇数的位,那么就要将这一位的数字增加,使其变为奇数,也就是将这一位加 11,然后让这后面所有的数字都变为 11
让这个数与从那一位偶数开始后的 aa 相减,就是我们要求的 bb
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
signed main()
{
	cin>>t;
	while(t--)
	{
		string s;
		cin>>s;
		int s1=0,s2=0;
		for(int i=0;i<s.size();i++)
			if((s[i]-'0')%2==1) continue;
			else
			{
				s1+=(s[i]-'0')+1;
				s2+=(s[i]-'0'); 
				for(int j=i+1;j<s.size();j++)
				{
					s1=s1*10+1;
					s2=s2*10+(s[j]-'0'); 
				}
				break;
			} 
		cout<<s1-s2<<endl;
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...