ในปัญหานี้ เราจะได้รับสองอาร์เรย์ arr1[] และ arr2[] งานของเราคือสร้างโปรแกรมเพื่อค้นหา องค์ประกอบของอาร์เรย์ที่ไม่สามารถหารด้วยองค์ประกอบใดๆ ของอาร์เรย์อื่นได้
คำอธิบายปัญหา: ในที่นี้ เราจำเป็นต้องค้นหาองค์ประกอบทั้งหมดจาก arr1 ที่ไม่หารด้วยองค์ประกอบใดๆ ของ arr2
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: arr1[] ={17, 15, 5, 12, 8} arr2[] ={5, 4}
ผลลัพธ์: 17
คำอธิบาย −
องค์ประกอบของ arr1 และองค์ประกอบที่แบ่งมัน
17 -> ไม่มีองค์ประกอบใดสามารถแบ่งได้
15 -> 5 แบ่งองค์ประกอบ
5 -> 5 แบ่งองค์ประกอบ
12 -> 4 แบ่งองค์ประกอบ
8 -> 4 แบ่งองค์ประกอบ
แนวทางการแก้ปัญหา -
แนวทางที่เรียบง่ายและไร้เดียงสาในการแก้ปัญหาคือการใช้วิธีการโดยตรง เราจะวนซ้ำผ่าน arr1 และสำหรับแต่ละองค์ประกอบของ arr1 เราจะตรวจสอบว่าองค์ประกอบใด ๆ ของ arr2 แบ่งองค์ประกอบนั้นหรือไม่ หากไม่มีองค์ประกอบใดแบ่งออก ให้พิมพ์องค์ประกอบนั้น
อัลกอริทึม −
ขั้นตอนที่ 1: วนซ้ำสำหรับ arr1, i -> 0 ถึง n-1
ขั้นตอนที่ 2.1: สำหรับแต่ละ arr1[i], วน arr2, สำหรับ j -> 0 ถึง n-1
ขั้นตอนที่ 2.2.1 : ถ้า arr1[i] % arr2[j] ==0 ตั้งค่าสถานะต่อไป =-1
ขั้นตอนที่ 2.3: if flag !=-1 พิมพ์ arr1[i].
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include<iostream> using namespace std; void findEleNotDivisbleByArray(int arr1[], int arr2[], int arr1Size, int arr2Size) { int flag = 0; for (int i = 0; i < arr1Size; i++) { flag = 0; for (int j = 0; j < arr2Size; j++){ if( arr1[i] % arr2[j] == 0 ) { flag = -1; break; } } if ( flag == 0 ) cout<<arr1[i]<<"\t"; } } int main() { int arr1[] = {17, 15, 5, 12, 23, 8}; int arr2[] = {5, 4}; int arr1Size = sizeof(arr1)/sizeof(arr1[0]); int arr2Size = sizeof(arr2)/sizeof(arr2[0]); cout<<"Elements of an array that are not divisible by any element of another array are "; findEleNotDivisbleByArray(arr1, arr2, arr1Size, arr2Size); return 0; }
ผลลัพธ์ -
Elements of an array that are not divisible by any element of another array are 17 23
วิธีแก้ปัญหานี้ใช้ได้แต่ไม่ได้ผล มาดูวิธีแก้ปัญหาที่มีประสิทธิภาพกัน
ในวิธีนี้ เราจะสร้างอาร์เรย์ isDivisible[] ขององค์ประกอบของ arr1 สำหรับองค์ประกอบทั้งหมดของ arr2 ให้ทำเครื่องหมายผลคูณทั้งหมดจนถึงองค์ประกอบที่ใหญ่ที่สุดของ arr1 และพิมพ์องค์ประกอบทั้งหมดที่ทำเครื่องหมายเป็นเท็จในอาร์เรย์ isDisible
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include<iostream> using namespace std; void findEleNotDivisbleByArray(int arr1[], int arr2[], int arr1Size, int arr2Size) { int maxEle = 0; for (int i = 0; i < arr1Size; i++) if (arr1[i] > maxEle) maxEle = arr1[i]; int mark[maxEle]; for (int i = 0; i < arr2Size; i++) for (int j = arr2[i]; j <= maxEle; j += arr2[i]) mark[j] = 1; for (int i = 0; i < arr1Size; i++) if ( mark[arr1[i]] != 1) cout << arr1[i] << endl; } int main() { int arr1[] = {17, 15, 5, 12, 8}; int arr2[] = {5, 4}; int arr1Size = sizeof(arr1)/sizeof(arr1[0]); int arr2Size = sizeof(arr2)/sizeof(arr2[0]); cout<<"Elements of an array that are not divisible by any element of another array are "; findEleNotDivisbleByArray(arr1, arr2, arr1Size, arr2Size); return 0; }
ผลลัพธ์ -
Elements of an array that are not divisible by any element of another array are 17