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

C++에서 배열의 GCD를 k의 배수로 만들기 위한 최소 연산

<시간/>

배열 arr와 다른 값 k가 있다고 가정합니다. 배열의 GCD를 k의 배수와 같게 만들기 위한 최소 연산 수를 찾아야 합니다. 이 경우 작업은 값을 늘리거나 줄입니다. 배열이 {4, 5, 6}이고 k가 5라고 가정합니다. 4를 1로 늘리고 6을 1로 줄이면 5가 됩니다. 여기서 연산의 수는 2입니다.

결과를 얻으려면 다음 단계를 따라야 합니다 -

단계 -

  • 배열의 모든 요소 e에 대해 2단계와 3단계를 수행합니다.
  • e가 1이 아니고 e> k이면 결과를 (e mod k) 및 (k – e mod k)의 최소값으로 증가시킵니다.
  • 그렇지 않으면 결과는 result + k – e가 됩니다.
  • 반환 결과

예시

#include <iostream>
using namespace std;
int countMinOp(int arr[], int n, int k) {
   int result = 0;
   for (int i = 0; i < n; ++i) {
      if (arr[i] != 1 && arr[i] > k) {
         result = result + min(arr[i] % k, k - arr[i] % k);
      } else {
         result = result + k - arr[i];
      }
   }
   return result;
}
int main() {
   int arr[] = { 4, 5, 6 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 5;
   cout << "Minimum operation required: " << countMinOp(arr, n, k);
}

출력

Minimum operation required: 2