เราได้รับจำนวนเต็ม 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