Chúng ta sẽ xem một bài toán thú vị liên quan đến mảng. Có một mảng n phần tử. Cần tạo mảng khác n phần tử, trong đó vị trí thứ i của mảng thứ hai chứa tổng tất cả phần tử của mảng thứ nhất trừ phần tử thứ i. Ràng buộc: không được sử dụng phép trừ.
Nếu cho phép trừ, ta dễ dàng giải bằng cách tính tổng tất cả phần tử, sau đó trừ phần tử thứ i của mảng đầu tiên và lưu vào vị trí i của mảng thứ hai.
Ở đây ta giải bằng cách cộng các phần tử mỗi lần, bỏ qua phần tử ở vị trí i, với i từ 0 đến n-1. Xem thuật toán để hiểu rõ hơn.
Thuật toán
sumArray(arr, n)
bắt đầu
định nghĩa mảng res kích thước n
với mọi phần tử i trong arr, thực hiện
sum := 0
với mọi phần tử j trong arr, thực hiện
nếu i và j không giống nhau thì
sum := sum + arr[j]
kết thúc nếu
done
res[i] = sum
done
trả về res
kết thúc
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;
}
}
int 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);
return 0;
}
Kết quả
Initial Array: 5 4 7 6 9 2 3 Final Array: 31 32 29 30 27 34 33