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