เราได้รับจำนวนเต็ม n เป้าหมายคือการหาแฝดสาม (ชุด 3 ตัวเลข) ที่ตรงตามเงื่อนไข -
-
a 2 +b 2 =c 2
-
1<=a<=b<=c<=n
เราจะทำสิ่งนี้โดยเรียกใช้สองลูปสำหรับค่า 1<=a<=n และ 1<=b<=n คำนวณ c ตามนั้น (c=sqrt(a2+b2 )) และนับจำนวนที่เพิ่มขึ้นหากตรงตามเงื่อนไขที่ 1 และ 2
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล − N=5
ผลผลิต − จำนวนแฝด − 1
คำอธิบาย −
for a=3, b=4 and c=5 both conditions are met.
ป้อนข้อมูล − N=3
ผลผลิต − จำนวนแฝด − 0
คำอธิบาย −
ไม่มีแฝดสามที่ตรงตามเงื่อนไข 1 และ 2
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
จำนวนเต็ม N เก็บขีดจำกัดสุดท้ายของช่วง [1,N].
-
ฟังก์ชัน countTriplets(int n) รับ n และส่งกลับจำนวน triplets ที่ตรงตามเงื่อนไข a 2 +b 2 =c 2 และ 1<=a<=b<=c<=n
-
การนับตัวแปรจะเก็บจำนวนของแฝดสามดังกล่าว โดยเริ่มแรกเป็น 0
-
ผลรวมตัวแปรเก็บผลรวมกำลังสองของ a และ b
-
เริ่มจาก a=1 ถึง n และ b=a ถึง n คำนวณ sum=a*a+b*b และ c เป็นรากที่สองของผลรวม (sqrt(sum))
-
หากคำนวณ c มีค่าเช่นนั้น c*c==sum และ b<=c &&c<=n ( ตรงตามเงื่อนไข 1 และ 2 )
-
การเพิ่มขึ้นนับเป็นปัจจุบัน a,b,c เป็นไปตามเงื่อนไขทั้งสอง
-
ดำเนินการนี้จนถึง a=n และ b=n ในท้ายที่สุดการนับจะมีแฝดสามจำนวนที่ตรงตามเงื่อนไข
-
คืนจำนวนตามผลลัพธ์ที่ต้องการ
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int countTriplets(int n){ int count = 0; int a,b,c; a=b=c=1; int sum=0; for (a = 1; a <= n; a++) //1<=a<=n{ for (b = a; b <= n; b++) //1<=a<=b<=n{ sum = a*a + b*b; //a^2 + b^2 =c^2 c = sqrt(sum); if (c * c == sum && b<=c && c<=n) //check 1<=a<=b<=c<=n{ count++; cout<<endl<<"a :"<<a<<" b :"<<b<<" c :"<<c; //to print triplets } } } return count; } int main(){ int N = 15; cout <<endl<< "Number of triplets : "<<countTriplets(N); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Number of triplets : a :3 b :4 c :5 a :5 b :12 c :13 a :6 b :8 c :10 a :9 b :12 c :154 Number of triplets : 4