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

C++ 합 배열 퍼즐

<시간/>

배열 동일한 데이터 유형의 여러 요소를 저장하는 데이터 구조입니다. 전체 값 세트를 한 번에 저장할 수 있습니다. 그러나 길이는 미리 정의해야 합니다.

이 합 배열 퍼즐에서 우리는 n이라고 하는 일정한 크기의 배열 A1이 주어집니다. 이 퍼즐을 풀기 위해 위치가 사용되는 요소를 제외한 배열의 모든 요소의 합을 저장하는 S1이라는 배열을 만들 것입니다. 예를 들어, S1[3]이 계산되는 경우 위치 4에 있는 요소를 제외한 A1의 모든 요소의 합을 찾습니다.

예시 -

Array A1 = {1,2,3,4,6}
Output S1 = {15,14,13,12,10}

설명 − 합계 배열을 계산하기 위해 초기 배열의 각 요소를 합계 변수에 추가합니다. 합계 배열과 동일한 숫자의 값을 수락합니다. 즉, 합계 배열의 첫 번째 요소에 대해 배열의 첫 번째 요소를 제외한 모든 요소의 합을 계산하고 전체 배열에 대해서도 동일하게 계산합니다. 이 논리를 사용하여 sum 배열의 각 요소에 대한 값을 계산해 보겠습니다.

Sum[0], 0 번째 에 있는 요소를 제외한 요소의 합을 계산합니다. 인덱스. 그래서,

합계[0] =2+3+4+6 =15

마찬가지로 sum[1]...

의 값을 계산합니다.

합계[1] =1+3+4+6 =14

합계[2] =1+2+4+6 =13

합계[3] =1+2+3+6 =12

합계[4] =1+2+3+4 =10

따라서 합계 배열의 모든 요소가 준비되지 않았으며 합계 배열은 합계 ={15,14,13,12,10}

입니다.

알고리즘

Step 1 : Initialise a sum array sum[n] to zero, where n = size of the original array.
Step 2 : Iterate over sum[] and do :
   Step 2.1 : For sum[i], run a for loop for j -> 0 to n
   Step 2.2 : if(i != j) {sum[i] += arr[j] }
Step 3: Print sum array using std print statement.

예시

#include <iostream>
using namespace std;
int main() {
   int arr[] = { 3, 6, 4, 8, 9 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int leftSum[n], rightSum[n], Sum[n], i, j;
   leftSum[0] = 0;
   rightSum[n - 1] = 0;
   cout<<"The original array is : \n";
   for (i = 0; i < n; i++)
      cout << arr[i] << " ";
   for (i = 1; i < n; i++)
      leftSum[i] = arr[i - 1] + leftSum[i - 1];
   for (j = n - 2; j >= 0; j--)
      rightSum[j] = arr[j + 1] + rightSum[j + 1];
   for (i = 0; i < n; i++)
      Sum[i] = leftSum[i] + rightSum[i];
   cout<<"\nThe sum array is : \n";
   for (i = 0; i < n; i++)
      cout << Sum[i] << " ";
   return 0;
}

출력

The original array is :
3 6 4 8 9
The sum array is :
27 24 26 22 21