给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a 2 +b 2 =c 。设计c++程序
时间: 2024-03-26 10:38:28 浏览: 141
可以使用双指针的方法,设定左右两个指针分别指向 0 和 sqrt(c),然后进行遍历和判断。
具体思路如下:
1. 初始化左指针 left 为 0,右指针 right 为 sqrt(c)。
2. 当 left <= right 时,进行循环遍历:
a. 如果 left^2 + right^2 = c,说明找到了符合条件的 a 和 b,返回 true。
b. 如果 left^2 + right^2 < c,说明 a 需要更大一些,因此将 left 增加 1。
c. 如果 left^2 + right^2 > c,说明 b 需要更小一些,因此将 right 减少 1。
3. 如果遍历完整个区间都没有找到符合条件的 a 和 b,说明不存在这样的数,返回 false。
C++代码实现如下:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
bool judgeSquareSum(int c) {
int left = 0, right = sqrt(c); // 初始化左右指针
while (left <= right) {
int sum = left * left + right * right; // 计算 a^2 + b^2 的值
if (sum == c) { // 找到符合条件的 a 和 b
return true;
} else if (sum < c) { // a 需要更大一些
left++;
} else { // b 需要更小一些
right--;
}
}
return false; // 没有找到符合条件的 a 和 b
}
int main() {
int c;
cout << "请输入一个非负整数 c:";
cin >> c;
bool result = judgeSquareSum(c);
if (result) {
cout << "存在两个整数 a 和 b,使得 a^2 + b^2 = " << c << endl;
} else {
cout << "不存在两个整数 a 和 b,使得 a^2 + b^2 = " << c << endl;
}
return 0;
}
```
阅读全文