Computer >> Máy Tính >  >> Lập trình >> C ++

Chuyển đổi một số có độ dài N sao cho nó chứa bất kỳ một chữ số nào ít nhất là 'K' lần trong C ++

Trong hướng dẫn này, chúng ta sẽ thảo luận về một chương trình để chuyển đổi một số có độ dài N sao cho nó chứa bất kỳ một chữ số nào ít nhất là ‘K’ lần.

Đối với điều này, chúng tôi sẽ được cung cấp một số có độ dài N. Nhiệm vụ của chúng tôi là chuyển đổi các chữ số trong một số đã cho sao cho bất kỳ một chữ số nào được lặp lại ít nhất ‘K’ lần. Ngoài ra, bạn phải tính toán chi phí của hoạt động này là chênh lệch tuyệt đối giữa hai hoạt động và cuối cùng in ra chi phí tối thiểu.

Ví dụ

#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;
}

Đầu ra

1
21222