สมมติว่าเรามีจำนวนเต็มที่ไม่เป็นลบ c เราต้องตัดสินใจว่ามีจำนวนเต็ม a และ b สองจำนวนที่ตรงกับ a^2 + b^2 =c หรือไม่พี>
ดังนั้น หากอินพุตเท่ากับ 61 ผลลัพธ์จะเป็น True เนื่องจาก 61 =5^2 + 6^2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน isPerfect() ซึ่งจะใช้เวลา x
-
sr :=รากที่สองของ x
-
คืนค่า true เมื่อ (sr - floor of sr) เป็น 0
-
จากวิธีหลักให้ทำดังนี้
-
ถ้า c เท่ากับ 0 แล้ว −
-
คืนความจริง
-
-
สำหรับการเริ่มต้น i :=0 เมื่อฉัน <เพดานของสแควร์รูทของ c ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -
-
b :=c - i * i
-
ถ้า isPerfect(b) เป็นจริง ดังนั้น −
-
คืนความจริง
-
-
-
คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool isPerfect(int x){
long double sr = sqrt(x);
return ((sr - floor(sr)) == 0);
}
bool judgeSquareSum(int c) {
if (c == 0)
return true;
int b;
for (int i = 0; i < ceil(sqrt(c)); i++) {
b = c - i * i;
if (isPerfect(b))
return true;
}
return false;
}
};
main(){
Solution ob;
cout << (ob.judgeSquareSum(61));
} อินพุต
61
ผลลัพธ์
1