Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวนแฝด (a, b, c) โดยที่ a^2 + b^2 =c^2 และ 1<=a<=b<=c<=n ใน C++


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