B4002 [GESP202406 二级] 平方之和
欢迎报名洛谷网校,期待和大家一起进步!
:::align{center} :::
本题考察循环嵌套。
首先我们使用一重循环读入正整数
方法 1
使用二重循环,第一重循环枚举
使用这一种做法,需要做出优化:如果
找到解之后,使用布尔类型变量 flag 标记找到解,输出 Yes 并且退出两重循环。
参考代码:
bool flag = false; // 还未发现解
// 在循环条件中的 !flag,意思是如果 flag 为真,则不执行循环。
for (int x = 1; x * x <= a && !flag; x++) {
for (int y = 1; y * y <= a && !flag; y++) {
if (x * x + y * y == a) {
flag = true; // 找到了一组解
cout << "Yes" << endl;
}
}
}
// 无解情况输出 No
方法 2
实际上我们只需要循环枚举
判断的方式是对 sqb 中,随后我们判断 sqb * sqb 是否等于
参考代码:
for (int x = 1; x * x < a; x++) {
int b = a - x * x;
int sqb = sqrt(b);
if (sqb * sqb == b) {
cout << "Yes" << endl;
flag = true;
break;
}
}
// 无解情况输出 No