ในบทความนี้ เราจะอธิบายวิธีการหา 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