คำอธิบายปัญหา
ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมแปลงตัวเลขที่มีความยาว 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