Ở đây chúng ta sẽ thấy một vấn đề thú vị liên quan đến mảng. Có một mảng với n phần tử. Chúng ta phải tạo một mảng khác gồm n phần tử. Nhưng vị trí thứ i của mảng thứ hai sẽ chứa tổng tất cả các phần tử của mảng đầu tiên ngoại trừ phần tử thứ i. Và một hạn chế là chúng ta không thể sử dụng toán tử trừ trong bài toán này.
Nếu chúng ta có thể sử dụng phép toán trừ, chúng ta có thể dễ dàng giải quyết vấn đề này, bằng cách lấy tổng của tất cả các phần tử, sau đó trừ phần tử thứ i của mảng đầu tiên và lưu nó vào vị trí thứ i của mảng thứ hai.
Ở đây chúng ta đang giải quyết vấn đề này bằng cách thêm các phần tử vào mọi lúc và bỏ qua phần tử ở vị trí i, với i trong 0..n-1. Hãy để chúng tôi xem thuật toán để tìm ra điểm.
Thuật toán
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
Ví dụ
#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); }
Đầu ra
Initial Array: 5 4 7 6 9 2 3 Final Array: 31 32 29 30 27 34 33