Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ปรับสมดุลอาร์เรย์โดยใช้องค์ประกอบอาร์เรย์ใน C++ . เท่านั้น


ในปัญหานี้ เราได้รับอาร์เรย์ขององค์ประกอบ 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