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

C++에서 적어도 'K'번 이상 임의의 한 자릿수를 포함하도록 길이 N의 숫자를 변환합니다.

<시간/>

이 튜토리얼에서는 길이가 N인 숫자를 변환하는 프로그램에 대해 논의할 것입니다. 이 프로그램은 최소 'K'번의 숫자를 포함합니다.

이를 위해 주어진 길이 N의 숫자가 제공됩니다. 우리의 임무는 주어진 숫자의 숫자를 변환하여 한 숫자가 최소한 'K'번 반복되도록 하는 것입니다. 또한 이 연산의 절대적 차이인 이 연산의 비용을 계산하고 최종적으로 최소 비용을 출력해야 합니다.

예시

#include <bits/stdc++.h>
using namespace std;
//calculating the minimum value and final number
int get_final(int n, int k, string a){
   int modtemp;
   //count of numbers changed to k
   int co;
   string temp;
   //storing the minimum cost
   pair<int, string> ans = make_pair(INT_MAX, "");
   for (int i = 0; i < 10; i++) {
      temp = a;
      //storing the temporary modified number
      modtemp = 0;
      co = count(a.begin(), a.end(), i + '0');
      for (int j = 1; j < 10; j++) {
         if (i + j < 10) {
            for (int p = 0; p < n; p++) {
               if (co <= k)
                  break;
               if (i + '0' == temp[p] - j) {
                  temp[p] = i + '0';
                  modtemp += j;
                  co++;
               }
            }  
         }
         if (i - j >= 0) {
            for (int p = n - 1; p >= 0; p--) {
               if (co >= k)
                  break;
               if (i + '0' == temp[p] + j) {
                  temp[p] = i + '0';
                  modtemp += j;
                  co++;
               }
            }
         }
      }
      //replacing the minimum cost with the previous one
      ans = min(ans, make_pair(modtemp, temp));
   }
   cout << ans.first << endl << ans.second << endl;
}
int main(){
   int n = 5, k = 4;
   string a = "21122";
   get_final(n, k, a);
   return 0;
}

출력

1
21222