ที่นี่เราจะเห็นปัญหาหนึ่งที่น่าสนใจเกี่ยวกับอาร์เรย์ มีอาร์เรย์ที่มีองค์ประกอบ n เราต้องสร้างอาร์เรย์ขององค์ประกอบ n อีกชุดหนึ่ง แต่ตำแหน่งที่ i ของอาร์เรย์ที่สองจะเก็บผลรวมขององค์ประกอบทั้งหมดของอาร์เรย์แรก ยกเว้นองค์ประกอบที่ i และข้อจำกัดอย่างหนึ่งคือเราไม่สามารถใช้ตัวดำเนินการลบในปัญหานี้ได้
ถ้าเราใช้การลบ การดำเนินการ เราสามารถแก้ปัญหานี้ได้ง่ายๆ โดยหาผลรวมขององค์ประกอบทั้งหมด จากนั้นลบองค์ประกอบที่ i ของอาร์เรย์แรกและเก็บไว้ในตำแหน่งที่ i ของอาร์เรย์ที่สอง
เรากำลังแก้ปัญหานี้โดยการเพิ่มองค์ประกอบทุกครั้ง และละเว้นองค์ประกอบที่ตำแหน่ง i สำหรับ i ใน 0..n-1 ให้เราดูอัลกอริธึมเพื่อให้ได้ประเด็น
อัลกอริทึม
sumArray(arr, n)
begin define an array called res of size n for all elements i in arr, do sum := 0 for all elements j in arr, do if i and j are not same, then sum := sum + arr[j] end if done res[i] = sum done return res end
ตัวอย่าง
#include<iostream> using namespace std; void printArray(int arr[], int n) { for(int i = 0; i<n; i++) { cout << arr[i] << " "; } cout << endl; } void sumArray(int arr[], int resArr[], int n) { for(int i = 0; i<n; i++) { int sum = 0; for(int j =0; j<n; j++ ) { if(i != j) { sum += arr[j]; } } resArr[i] = sum; } } main() { int myArr[7] = {5, 4, 7, 6, 9, 2, 3}; int resArr[7]; cout << "Initial Array: "; printArray(myArr, 7); sumArray(myArr, resArr, 7); cout << "Final Array: "; printArray(resArr, 7); }
ผลลัพธ์
Initial Array: 5 4 7 6 9 2 3 Final Array: 31 32 29 30 27 34 33