Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++를 사용하여 암호화된 배열(다른 요소의 합계 배열)에서 원본 배열을 찾습니다.

<시간/>

정수 배열이 있다고 가정하고 그 배열은 암호화된 배열입니다. 배열이 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