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

주어진 제약 조건으로 주어진 배열의 요소를 추가하시겠습니까?

<시간/>

여기서 우리는 한 가지 문제를 보게 될 것입니다. 두 개의 배열 요소를 추가하고 다른 배열에 저장할 것입니다. 그러나 우리는 몇 가지 제약을 따를 것입니다. 이러한 제약 조건은 다음과 같습니다 -

  • 더하기는 두 배열의 0번째 인덱스부터 명시해야 합니다.
  • 합계가 한 자리 이상인 경우 분할하고 각 자리를 해당 위치에 배치합니다.
  • 더 큰 입력 배열의 나머지 숫자는 출력 배열에 저장됩니다.

아이디어를 얻을 수 있는 알고리즘을 살펴보겠습니다.

알고리즘

addArrayConstraints(arr1, arr2)

Begin
   define empty vector out
   i := 0
   while i is less than both arr1.length and arr2.length, do
      add := arr1[i] + arr2[i]
      if add is single digit number, then
         insert add into out
      else
         split the digits and push each digit into out
   end if
done
while arr1 is not exhausted, do
   insert each element directly into out if they are single digit, otherwise split and insert
done
while arr2 is not exhausted, do
   insert each element directly into out if they are single digit, otherwise split and insert
done
End

예시

#include<iostream>
#include<vector>
using namespace std;
void splitDigit(int num, vector<int> &out) { //split the digits and store into vector to add into array
   vector<int> arr;
   while (num) {
      arr.insert(arr.begin(), num%10);
      num = num/10;
   }
   out.insert(out.end(), arr.begin(), arr.end());
}
void addArrayConstraints(int arr1[], int arr2[], int m, int n) {
   vector<int> out;
   int i = 0; //point current index of arr1 and arr2
   while (i < m && i <n) {
      int add = arr1[i] + arr2[i];
      if (add < 10) //if it is single digit, put the sum, otherwise split them
         out.push_back(add);
      else
         splitDigit(add, out);
      i++;
   }
}
while (i < m) //if arr1 has more elements
   splitDigit(arr1[i++], out);
while (i < n) //if arr2 has more elements
   splitDigit(arr2[i++], out);
for (int i = 0; i< out.size(); i++)
   cout << out[i] << " ";
}
main() {
   int arr1[] = {9323, 8, 6, 55, 25, 6};
   int arr2[] = {38, 11, 4, 7, 8, 7, 6, 99};
   int n1 = sizeof(arr1) / sizeof(arr1[0]);
   int n2 = sizeof(arr2) / sizeof(arr2[0]);
   addArrayConstraints(arr1, arr2, n1, n2);
}

출력

9 3 6 1 1 9 1 0 6 2 3 3 1 3 6 9 9