ในปัญหานี้ เราได้รับอาร์เรย์ขององค์ประกอบ n งานของเราคือสร้างโปรแกรมเพื่อนับจำนวนการดำเนินการเพื่อให้อาร์เรย์เท่ากันโดยใช้องค์ประกอบเท่านั้น
เราจำเป็นต้องนับจำนวนการดำเนินการบวกหรือลบที่จะดำเนินการเพื่อให้องค์ประกอบทั้งหมดของอาร์เรย์เท่ากัน
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: arr[] ={4, 0, 3, 1, 2}
ผลลัพธ์: 3
คำอธิบาย:
ค่าที่เท่ากันจะเป็น 2
ยอดรวมจะเท่าเดิม เราจะเอา 1 จากค่าที่ arr[3] แล้วบวกเข้าไปที่ arr[1]
จากนั้นเราจะเอา 2 จากค่าที่ arr[0] มาบวกกับค่าที่ arr[1]
แนวทางการแก้ปัญหา:
วิธีแก้ปัญหาอย่างง่ายคือการค้นหาองค์ประกอบจากอาร์เรย์ที่จะถือว่าเป็นองค์ประกอบซึ่งจะเป็นองค์ประกอบที่เท่ากันสำหรับอาร์เรย์
เราจะตรวจสอบว่าการดำเนินการเป็นไปได้หรือไม่โดยการหาค่าเฉลี่ย หากเป็นจำนวนเต็ม การปรับเท่ากันก็เป็นไปไม่ได้
หากเป็นไปได้เราจะหาจำนวนการดำเนินการที่จำเป็นแล้วส่งคืน การนับการดำเนินการเท่ากับครึ่งหนึ่งของผลรวมของผลต่างสัมบูรณ์ของตัวเลขทั้งหมดที่มีค่าเฉลี่ย
อัลกอริทึม :
ขั้นตอนที่ 1: หาค่าเฉลี่ยขององค์ประกอบทั้งหมดของอาร์เรย์
ขั้นตอนที่ 2: ถ้าค่าเฉลี่ยไม่ใช่จำนวนเต็ม ให้คืนค่า -1 ซึ่งบ่งชี้ว่าไม่สามารถปรับสมดุลได้
ขั้นตอนที่ 3: มิฉะนั้น ให้ค้นหาความแตกต่างที่แน่นอนระหว่างองค์ประกอบทั้งหมดกับค่าเฉลี่ย
ขั้นตอนที่ 4: คืนค่าครึ่งหนึ่งของค่าเฉลี่ย
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int calcEqualisedOperations(int arr[], int n) { int sum = 0, average, operations = 0; for (int i = 0; i < n; i++) sum += arr[i]; if (sum % n != 0) return -1; average = sum/n; for (int i = 0; i < n; i++) operations += ( abs(arr[i] - average) / 2 ); return operations; } int main() { int arr[] = { 5, 3, 2, 6 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"Operations required to equalize an array using array elements is "<<calcEqualisedOperations(arr, n); return 0; }
ผลลัพธ์ -
Operations required to equalize an array using array elements is 2