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

ค้นหาจำนวน Sextuplets ที่ตรงกับสมการโดยใช้ C++


ในบทความนี้ เราจะอธิบายวิธีการหา sextuplets จำนวนหนึ่งที่ตรงกับสมการ เราจึงใช้สมการเป็นตัวอย่างในการหาค่า a, b, c, d, e และ f ที่ตรงตามสมการด้านล่าง

( a + b + c ) * e / d = f

มาเรียงสมการใหม่กันเถอะ -

( a + b + c ) = ( f * d ) / e

นี่เป็นตัวอย่างง่ายๆ สำหรับปัญหาที่กำหนด -

Input : arr [ ] = { 1, 3 }
Output : 4
Explanation : ( a, b, c, e, f ) = 1, d = 3
   ( a, b, c, d, e ) = 1, f = 3
   ( a, b, c ) = 1, ( d, e, f ) = 3
   ( a, b, c, d, f ) = 3, ( e ) = 1

Input : arr [ ] = { 2, 5 }
Output : 3

แนวทางในการหาแนวทางแก้ไข

เราจะใช้แนวทางที่ไร้เดียงสาเพื่อค้นหาวิธีแก้ไขปัญหาที่กำหนด

แนวทางที่ไร้เดียงสา

ในปัญหานี้ เมื่อดูที่ LHS และ RHS เราจะสามารถค้นหาผลลัพธ์ที่เป็นไปได้ทั้งหมดของ LHS และจัดเก็บในอาร์เรย์ได้ เช่นเดียวกับการสร้างอาร์เรย์สำหรับ RHS และเติมผลลัพธ์ด้วย RHS ที่เป็นไปได้ทั้งหมด

ตรวจสอบทั้งสองอาร์เรย์เพื่อหาค่าเดียวกันและเพิ่มจำนวนสำหรับแต่ละค่าที่พบ และในที่สุดก็แสดงผล

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
int findsamenumbers(int *arr1, int *arr2, int n){
    int i = 0, j = 0, k = 0, count=0;
    while(( i < n*n*n+1) && (j < n*n*n+1)){
        if(arr1[i] < arr2[j])
            i++;
        else if(arr1[i] == arr2[j]){
            count++;
        int temp = arr1[i];
        while(temp==arr1[++i]){
            count++;
        }
        while(temp==arr2[++j]){
            count++;
        }
    }
    else
        j++;
    }  
    return count;
}
int main(){
    int arr[] = {2,5};
    int n = sizeof(arr)/sizeof(arr[0]);
    // Generating all possible values of LHS array
    int index = 0,i;
    int LHS[n*n*n ];
    for ( i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            for(int k = 0; k < n; k++){
                LHS[index++] = (arr[i] * arr[j]) / arr[k];
            }
        }
    }
    // Generating all possible value of RHS array
    int RHS[n*n*n ];
    index=0;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            for (int k = 0; k < n; k++){
                RHS[index++] = (arr[i] + arr[j] + arr[k]);
            }
        }
    }
    sort(RHS, RHS + (n*n*n));
    sort(LHS, LHS + (n*n*n));
    int result = findsamenumbers(LHS, RHS, n);
    cout<<"Number of sextuplets that satisfy an equation: "<<result;
    return 0;
}

ผลลัพธ์

Number of sextuplets that satisfy an equation: 3

คำอธิบายของโปรแกรมข้างต้น

ในโปรแกรมนี้ เรากำลังสร้างสองอาร์เรย์เพื่อเก็บทุกผลลัพธ์ของ LHS และ RHS เราใช้ลูปที่ซ้อนกันสามลูปเพื่อใส่ทุกค่าที่เป็นไปได้ของ (a, b, c) ใน LHS และ (d, e, f) ใน RHS หลังจากนั้น เรากำลังจัดเรียงอาร์เรย์ทั้งสองเพื่อเปรียบเทียบอาร์เรย์ทั้งสองและค้นหาค่าเดียวกันในอาร์เรย์ทั้งสอง โดยส่งผ่านอาร์เรย์ทั้งสองไปยังฟังก์ชัน findsamenumber()

ในฟังก์ชัน findsamenumber() เราจะตรวจสอบค่าเดียวกันโดยใช้ลูปที่ซ้อนกันสองอัน เมื่อเราพบองค์ประกอบสองอย่างเหมือนกัน เราจะตรวจสอบความถี่ของตัวเลขนั้นในอาร์เรย์ทั้งสองเพื่อให้นับค่าที่เป็นไปได้ทั้งหมด

if(arr1[i] == arr2[j]){
   count++;
   int temp = arr1[i];
   while(temp==arr1[++i]){
      count++;
   }
   while(temp==arr2[++j]){
      count++;
   }

บทสรุป

ในบทความนี้ เราได้แก้ไขจำนวน sextuplets ที่ตรงกับสมการที่อาร์เรย์ที่กำหนด เราพบทุกค่าที่เป็นไปได้ของตัวแปรใน 6 สมการตัวแปร (a + b + c) * e / d =f เราสามารถแก้ปัญหานี้ในภาษาการเขียนโปรแกรมอื่นๆ เช่น C, Java และ python