Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แปลงตัวเลขความยาว N ให้มีตัวเลขซ้ำอย่างน้อย K ครั้งใน C++

คำอธิบายปัญหา

ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมแปลงตัวเลขที่มีความยาว N ให้มันมีตัวเลขซ้ำอย่างน้อย 'K' ครั้ง

สำหรับนี้ เราจะได้รับตัวเลขที่มีความยาว N งานของเราคือแปลงหลักของตัวเลขที่กำหนด ให้ตัวเลขใดตัวเลขหนึ่งปรากฏซ้ำอย่างน้อย 'K' ครั้ง นอกจากนี้ คุณต้องคำนวณค่าใช้จ่าย (cost) ของการดำเนินการนี้ ซึ่งคือความต่างสัมบูรณ์ระหว่างตัวเลขเดิมและใหม่ และพิมพ์ค่าใช้จ่ายขั้นต่ำ

ตัวอย่างโค้ด

#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