转换长度为N的数字,以使其在C ++中至少包含“ K”次的任何一位

在本教程中,我们将讨论一个程序,该程序将转换一个长度为N的数,以使其包含至少“ K”次的任意一位。

为此,我们将获得给定长度N的数字。我们的任务是转换给定数字中的数字,以使任何一位数字至少重复“ K”次。另外,您必须计算此操作的成本,这是两者之间的绝对差,最后打印出最低成本。

示例

#include <bits/stdc++.h>
using namespace std;
//计算最小值和最终数
int get_final(int n, int k, string a){
   int modtemp;
   //数字计数更改为k-
   int co;
   string temp;
   //存储最低成本
   pair<int, string> ans = make_pair(INT_MAX, "");
   for (int i = 0; i < 10; i++) {
      temp = a;
      //存储临时修改的号码
      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++;
               }
            }
         }
      }
      //用上一个替换最低成本
      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