จากปัญหาเราได้รับชุด arr[n] โดยที่ n คือจำนวนองค์ประกอบจำนวนเต็มในชุด ภารกิจคือการค้นหาองค์ประกอบความแตกต่างสูงสุดที่จะเพิ่ม เพื่อให้ได้องค์ประกอบในชุด กล่าวอีกนัยหนึ่งความแตกต่างควรอยู่ในรูป |a-b| โดยที่ 'a' และ 'b' ทั้งคู่อยู่ในเซตและความแตกต่างไม่ควรน้อยที่สุด ดังนั้น เราจะนับจำนวนความแตกต่างสูงสุดซึ่งแตกต่างและมากที่สุดจากชุด มาทำความเข้าใจปัญหาและวิธีแก้ปัญหาด้วยตัวอย่าง
ป้อนข้อมูล − set ={1}, 5}
ผลผลิต − องค์ประกอบความแตกต่างสูงสุดที่สามารถเพิ่มลงในชุดได้คือ:1
คำอธิบาย − ในชุดมีความแตกต่างกันเพียง 1 ข้อเท่านั้น คือ |1-5| =4
ป้อนข้อมูล − set ={2, 7, 1, 9}
ผลผลิต − ความแตกต่างสูงสุด
องค์ประกอบที่สามารถเพิ่มลงในชุดได้คือ:5
คำอธิบาย − ข้อแตกต่างในชุดมีดังนี้ −
|2-7| = 5 |7-1| = 6 |1-9| = 8 |2-9| = 7 |7-9| = 2
แนวทางที่ใช้ในโปรแกรมด้านล่างดังนี้
-
ใช้อาร์เรย์จำนวนเต็ม arr[n] เพื่อเก็บค่าของชุด
-
ในฟังก์ชัน maximum() ให้ทำตามขั้นตอนที่ 3 ถึง 6
-
ประกาศองค์ประกอบ ele, temp, val และตั้งค่าให้เท่ากับ arr[0]
-
วน i ตั้งแต่ 1 จนถึงขนาดของอาร์เรย์เพิ่มขึ้น 1 ขั้น
-
ค้นหา gcd ขององค์ประกอบทั้งหมดในอาร์เรย์
-
ตั้งค่า temp เป็นค่าสูงสุดระหว่าง temp หรือ arr[i].
-
-
ตั้งค่าผลรวมเป็น temp/val และ max เป็นความแตกต่างของผลรวมและขนาด
-
ส่งคืนและพิมพ์สูงสุด
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; //function to find maximum difference element int maximum(int arr[], int size){ int ele = arr[0]; int val = ele; int temp = ele; for (int i = 1; i < size; i++){ val = __gcd(val, arr[i]); temp = max(temp, arr[i]); } int total = temp / val; int max = total - size; return max; } int main(){ int arr[] = { 2, 7, 1, 9}; int size = sizeof(arr) / sizeof(arr[0]); cout<<"Maximum difference elements that can added to a set is: "<<maximum(arr, size); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -
Maximum difference elements that can added to a set is: 5