정수 배열이 있다고 가정하고 그 배열은 암호화된 배열입니다. 배열이 A =[10, 14, 12, 13, 11]이고 원래 배열이 B =[5, 1, 3, 2, 4라고 가정하겠습니다. ], 우리는 A의 인덱스 I에 있는 각 요소가 다음 규칙을 따른다는 것을 알 수 있습니다. A[i] =B[j]의 위치 j에 있는 모든 요소의 합, 여기서 I ≠ j. 우리의 임무는 암호화된 배열에서 원래 배열을 찾는 것입니다.
작업은 산술 관찰을 기반으로 합니다. 배열의 크기가 4이고 원래 배열 B에 4개의 요소 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