ภารกิจคือเพิ่มค่าของตัวเลข A ให้ใหญ่สุดโดยการแทนที่ตัวเลขบางหลักด้วยตัวเลขที่มีอยู่ในตัวเลข B อื่น จะไม่มีการแทนที่ตัวเลขหากค่าของ A ไม่สามารถขยายให้ใหญ่สุดได้
หมายเหตุ − ตัวเลขจาก B สามารถใช้ได้เพียงครั้งเดียว
ตอนนี้มาทำความเข้าใจสิ่งที่เราต้องทำโดยใช้ตัวอย่าง -
ป้อนข้อมูล
A = “1221” B = “1211”
ผลผลิต
Maximum value of A possible 2221
คำอธิบาย − เราเลือก 2 จาก B และแทนที่ด้วย 1 ตัวแรกของ A นี่เป็นทางเลือกเดียวที่จะแทนที่ตัวเลขอื่น ๆ ของ A ด้วย 2 หรือ 1 จะไม่เพิ่มมูลค่าของมัน
ป้อนข้อมูล
A = “1002” B = “3200”
ผลผลิต
Maximum value of A possible 3202
แนวทางที่ใช้ในโปรแกรมด้านล่างดังนี้
-
ตัวเลขแต่ละตัวใน A จะถูกแทนที่ด้วยตัวเลข B หากน้อยกว่า B
-
เรียงลำดับสตริง B จากน้อยไปมาก
-
เริ่มข้าม A จากซ้าย
-
ตอนนี้ข้าม B จากขวา
-
แทนที่ตัวเลขใน A ด้วยตัวเลขของ B หากมีขนาดเล็กกว่าและเพิ่มตัวชี้ที่ A และตัวชี้ลดที่ B
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; // Function to return the maximized value of a string valueup(string str1, string str2){ // Sort digits in ascending order sort(str2.begin(), str2.end()); int len1 = str1.length(); int len2 = str2.length(); int j = len2 - 1; for (int i = 0; i < len1; i++) { // If all the digits of b consumed if (j < 0) break; if (str2[j] > str1[i]) { str1[i] = str2[j]; j--; //once digit used } } return str1; } // Driver code int main(){ string a = "1204"; string b = "4521"; cout << valueup(a, b); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -
5424