首先,给大家道歉,这几天没有更新,之前说要给大家讲真题的程序,后来忘了,现在讲第一道。

题目描述

小 A 有一个整数 xxx,他想找到最小的正整数 yyy 使得下式成立:

(x and⁡ y)+(x or⁡ y)=2025(x \ \operatorname{and} \ y) + (x \ \operatorname{or} \ y) = 2025(x and y)+(x or y)=2025

其中 and⁡\operatorname{and}and 表示二进制按位与运算,or⁡\operatorname{or}or 表示二进制按位或运算。如果不存在满足条件的 yyy,则输出 −1-11

输入格式

一行,一个整数 xxx

输出格式

一行,一个整数,若满足条件的 yyy 存在则输出 yyy,否则输出 −1-11

输入输出样例 #1

输入 #1

1025

输出 #1

1000

说明/提示

对于所有测试点,保证 0≤x<20250 \leq x < 20250x<2025

(x and⁡ y)+(x or⁡ y)=2025(x \ \operatorname{and} \ y) + (x \ \operatorname{or} \ y) = 2025(x and y)+(x or y)=2025

其中:

  • and⁡\operatorname{and}and 表示按位与运算,运算符为 &\&&
  • or⁡\operatorname{or}or 表示按位或运算,运算符为 ∣|

题目引用洛谷
好了,开始讲题

思路分析

这题简单,说白了只有一个循环与判断,因为题上只有一个条件:(x and⁡ y)+(x or⁡ y)=2025(x \ \operatorname{and} \ y) + (x \ \operatorname{or} \ y) = 2025(x and y)+(x or y)=2025
xxx也是输入进来的,是已知的,不需要双循环。
但有一个问题,yyy我们不知道是多少,所以要循环,但是循环到多少呢?2025,因为(x and⁡ y)+(x or⁡ y)=2025(x \ \operatorname{and} \ y) + (x \ \operatorname{or} \ y) = 2025(x and y)+(x or y)=2025,所以yyy大于2025的话,一定不可能成立(x and⁡ y)+(x or⁡ y)=2025(x \ \operatorname{and} \ y) + (x \ \operatorname{or} \ y) = 2025(x and y)+(x or y)=2025
上代码!!!

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int x,flag=1;
	cin>>x;//输入x
	for(int y=1;y<=2025;y++)//循环y
	{
		if((x&y)+(x|y)==2025)//判断
		{
			flag=0;//做标记,是0说明找得到符合条件的y
			cout<<y<<endl;//输出y
		}
	}
	if(flag==1) cout<<-1;//如果找不到输出-1
	return 0;
 } 

或者这样写

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int x;
	cin>>x;
	for(int y=1;y<=2025;y++)
	{
		if((x&y)+(x|y)==2025)
		{
			cout<<y<<endl;
			return 0;
		}
	}
	cout<<-1;
	return 0;
 } 

为啥能这样,因为符合条件的只有一个,找到后直接结束。

好了,这期就到这里,给小汉堡点个赞与关注,谢谢,下期再见!!!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐