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

จัดเรียงอาร์เรย์ใหม่เพื่อลดผลรวมของผลิตภัณฑ์ขององค์ประกอบคู่ที่ต่อเนื่องกันใน C++


เราได้รับอาร์เรย์ประเภทจำนวนเต็มบวก สมมติว่า arr[] ขนาดที่กำหนด งานคือการจัดเรียงอาร์เรย์ใหม่ในลักษณะที่เมื่อเราคูณองค์ประกอบด้วยองค์ประกอบทางเลือกแล้วเพิ่มองค์ประกอบที่เป็นผลลัพธ์ทั้งหมดก็ควรส่งคืนผลรวมขั้นต่ำ

ให้เราดูสถานการณ์อินพุตเอาต์พุตที่หลากหลายสำหรับสิ่งนี้ -

ป้อนข้อมูล − int arr[] ={2, 5, 1, 7, 5, 0, 1, 0}

ผลผลิต − การจัดเรียงอาร์เรย์ใหม่เพื่อลดผลรวม เช่น 7 ของผลิตภัณฑ์ขององค์ประกอบคู่ที่ต่อเนื่องกันคือ:7 0 5 0 5 1 2 1

คำอธิบาย − เราได้รับอาร์เรย์จำนวนเต็มขนาด 8 ตอนนี้ เราจะจัดเรียงอาร์เรย์ใหม่ เช่น 7 0 5 0 5 1 2 1 เราจะตรวจสอบว่าค่าของอาร์เรย์ที่คืนค่าต่ำสุดคือ 7 * 0 + 5 * 0 + 5 * 1 + 2 * 1 =0 + 0 + 5 + 2 =7.

ป้อนข้อมูล − int arr[] ={1, 3, 7, 2, 4, 3}

ผลผลิต − การจัดเรียงอาร์เรย์ใหม่เพื่อลดผลรวม นั่นคือ 24 ของผลิตภัณฑ์ขององค์ประกอบคู่ที่ต่อเนื่องกันคือ:7 1 4 2 3 3

คำอธิบาย − เราได้รับอาร์เรย์จำนวนเต็มขนาด 6 ตอนนี้ เราจะจัดเรียงอาร์เรย์ใหม่ เช่น 7 1 4 2 3 3 เราจะตรวจสอบว่ามันคืนค่ารวมขั้นต่ำหรือไม่ เช่น 7 * 1 + 4 * 2 + 3 * 3 =7 + 8 + 9 =24

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนอาร์เรย์ขององค์ประกอบประเภทจำนวนเต็มและคำนวณขนาดของอาร์เรย์

  • จัดเรียงอาร์เรย์โดยใช้วิธีการจัดเรียงของ C++ STL โดยส่งอาร์เรย์และขนาดของอาร์เรย์ไปยังฟังก์ชันการจัดเรียง

  • ประกาศตัวแปรจำนวนเต็มและตั้งค่าด้วยการเรียก functionRearrange_min_sum(arr, size)

  • ภายในฟังก์ชัน Rearrange_min_sum(arr, size)

    • สร้างตัวแปร สมมติว่าเวกเตอร์ประเภท 'คู่' และ 'คี่' ซึ่งเก็บตัวแปรจำนวนเต็มไว้

    • ประกาศตัวแปรเป็น temp และ total และเริ่มต้นด้วย 0

    • เริ่มวนรอบ FOR จาก i ถึง 0 จนถึง i น้อยกว่าขนาด ภายในลูป ให้ตรวจสอบว่า i น้อยกว่าขนาด/2 แล้วกด arr[i] ไปที่เวกเตอร์คี่ ELSE ดัน arr[i] เป็นเวกเตอร์คู่

    • เรียกวิธีการจัดเรียงโดยส่งผ่าน even.begin(), even.end() และมากกว่า()

    • เริ่มวนรอบ FOR จาก i ถึง 0 จนถึง i น้อยกว่า even.size() ภายในลูป ตั้งค่า arr[temp++] เป็นคู่[j], arr[temp++] เป็นคี่[j] และผลรวมเป็นผลรวม + คู่[j] * odd[j]

    • ผลตอบแทนรวม

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int Rearrange_min_sum(int arr[], int size){
   vector<int> even, odd;
   int temp = 0;
   int total = 0;
   for(int i = 0; i < size; i++){
      if (i < size/2){
         odd.push_back(arr[i]);
      }
      else{
         even.push_back(arr[i]);
      }
   }
   sort(even.begin(), even.end(), greater<int>());
   for(int j = 0; j < even.size(); j++){
      arr[temp++] = even[j];
      arr[temp++] = odd[j];
      total += even[j] * odd[j];
   }
   return total;
}
int main(){
   int arr[] = { 2, 5, 1, 7, 5, 0, 1, 0};
   int size = sizeof(arr)/sizeof(arr[0]);
   //sort an array
   sort(arr, arr + size);
   //call function
   int total = Rearrange_min_sum(arr, size);
   cout<<"Rearrangement of an array to minimize sum i.e. "<<total<<" of product of consecutive pair elements is: ";
   for(int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   return 0;
}

ผลลัพธ์

หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้

Rearrangement of an array to minimize sum i.e. 7 of product of consecutive pair elements is: 7 0 5 0 5 1 2 1