สมมติว่าเรามีจำนวนเต็มที่ไม่เป็นลบ 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