Hãy coi chúng ta có một mảng các số nguyên, mảng đó là mảng được mã hóa, Giả sử mảng là A =[10, 14, 12, 13, 11], mảng ban đầu là B =[5, 1, 3, 2, 4 ], chúng ta có thể thấy rằng mỗi phần tử tại chỉ số I của A tuân theo quy tắc này:A [i] =tổng của tất cả các phần tử ở vị trí j trong B [j], trong đó I ≠ j. Nhiệm vụ của chúng tôi là tìm một mảng ban đầu từ một mảng đã được mã hóa.
Nhiệm vụ dựa trên quan sát số học. Giả sử mảng có kích thước là 4, mảng B ban đầu có bốn phần tử B =[a, b, c, d], vậy A sẽ giống như A [b + c + d, a + c + d, a + b + d , a + b + c], nếu cộng tất cả các phần tử của B, chúng ta sẽ được tổng =b + c + d + a + c + d + a + b + d + a + b + c =3 * ( a + b + c + d). Vậy tổng các phần tử của B sẽ là sum / 3, lúc này nếu ta thấy các phần tử của B sẽ là [sum - A [0], sum - A [1], sum - A [2], sum - A [3 ]]
Ví dụ
#include<iostream> using namespace std; void showOrigianlArray(int arr[], int n) { int sum = 0; for (int i=0; i<n; i++) sum += arr[i]; sum = sum/(n-1); for (int i=0; i<n; i++) cout << (sum - arr[i]) << " "; } int main() { int arr[] = {10, 14, 12, 13, 11}; int n = sizeof(arr) / sizeof(arr[0]); showOrigianlArray(arr, n); }
Đầu ra
5 1 3 2 4