เราได้รับอาร์เรย์ประเภทจำนวนเต็มบวก สมมติว่า 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