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

ปริศนา Sum Array ใน C ++?


ที่นี่เราจะเห็นปัญหาหนึ่งที่น่าสนใจเกี่ยวกับอาร์เรย์ มีอาร์เรย์ที่มีองค์ประกอบ 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