社区讨论

求解释!!!

B4002[GESP202406 二级] 平方之和参与者 2已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@m0s9citv
此快照首次捕获于
2024/09/07 22:46
2 年前
此快照最后确认于
2025/11/04 21:34
4 个月前
查看原帖
我刚开始代码是这样的:
CPP
#include <iostream>
using namespace std;
int n,a;
int main(){
    ios::sync_with_stdio(false);
	cin>>n;
	while(n--){
		cin>>a;
		bool flag=false;
		for(int x=1;x*x<=a;x++)
			for(int y=1;y*y<=a;y++)
				if(x*x+y*y==a){
					flag=true;
					break;
				}
		if(flag)cout<<"Yes\n";
		else cout<<"No\n";
	}
	return 0;
}
4040 分……
然后我又尝试了三目运算符
CPP
#include <iostream>
using namespace std;
int n,a;
int main(){
    ios::sync_with_stdio(false);
	cin>>n;
	while(n--){
		cin>>a;
		bool flag=false;
		for(int x=1;x*x<=a;x++)
			for(int y=1;y*y<=a;y++)
				if(x*x+y*y==a){
					flag=true;
					break;
				}
		flag?cout<<"Yes\n":cout<<"No\n";
	}
	return 0;
}
还是 4040
然后我就换了个思路:我把 flagflag 给取反了(代码如下)
CPP
#include <iostream>
using namespace std;
int n,a;
int main(){
    ios::sync_with_stdio(false);
	cin>>n;
	while(n--){
		cin>>a;
		bool flag=false;
		for(int x=1;x*x<=a;x++)
			for(int y=1;y*y<=a;y++)
				if(x*x+y*y==a){
					flag=true;
					break;
				}
		!flag?cout<<"No\n":cout<<"Yes\n";
	}
	return 0;
}
结果就莫名其妙的AC了(提交记录
后面我用每个代码都试了一下样例,结果就是只要取反 flagflagAC\textcolor{green}{AC}
有没有大佬解释一下???

回复

5 条回复,欢迎继续交流。

正在加载回复...