让我们考虑我们有一个整数数组,该数组是加密数组,假设该数组为A = [10,14,12,13,13,11],原始数组为B = [5,1,3,2,4 ],我们可以看到A的索引I处的每个元素都遵循以下规则:A [i] = B [j]中位置j处所有元素的总和,其中I≠j。我们的任务是从加密数组中找到一个原始数组。
该任务基于算术观察。假设数组的大小为4,则原始数组B具有四个元素B = [a,b,c,d],因此A将类似于A [b + c + d,a + c + d,a + b + d ,a + b + c],如果我们将B的所有元素相加,将得出sum = b + c + d + a + c + d + a + b + d + a + b + c = 3 *( a + b + c + d)。因此,B的元素之和为sum / 3,现在我们看到B的元素为[sum – A [0],sum – A [1],sum – A [2],sum – A [3 ]]
#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);
}输出结果
5 1 3 2 4