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