เราได้รับจำนวนบวกสองจำนวน num1 และ num2 เป้าหมายคือการหาผลรวมต่ำสุดและสูงสุดที่เป็นไปได้ของสองจำนวนนี้หลังจากทำการแทนที่เลขหลักในทั้งสองจำนวน เราสามารถแทนที่เลขหลักจากแต่ละจำนวนในทั้งสองจำนวนได้ ตัวอย่างเช่น num1 คือ 434 และ num2 คือ 324 และเราสามารถแทนที่เลข 3 ด้วย 4 และเลข 4 ด้วย 3 ได้ ผลรวมต่ำสุดจะเป็น 333 + 323 = 656 และผลรวมสูงสุดจะเป็น 444 + 424 = 864
ตัวอย่าง
อินพุต
num1 = 3224, num2 = 4321
เอาต์พุต
Maximum sum is : 8645 Minimum sum is : 6544
คำอธิบาย - แทนที่เลข 3 ทั้งหมดด้วย 4 เพื่อให้ทั้งสองจำนวนใหญ่ขึ้น (เพราะ 4 > 3): num1 กลายเป็น 4224, num2 กลายเป็น 4421, ผลรวม = 8645
แทนที่เลข 4 ทั้งหมดด้วย 3 เพื่อให้ทั้งสองจำนวนเล็กลง (เพราะ 3 < 4): num1 กลายเป็น 3223, num2 กลายเป็น 3321, ผลรวม = 6544
อินพุตอีกตัวอย่าง
num1 = 3111, num2 = 4111
เอาต์พุต
Maximum sum is : 8222 Minimum sum is : 6222
คำอธิบาย - แทนที่ 3 ด้วย 4: num1 = 4111, num2 = 4111, ผลรวม = 8222
แทนที่ 4 ด้วย 3: num1 = 3111, num2 = 3111, ผลรวม = 6222
แนวคิดการแก้ปัญหา
- ตัวเลขทั้งสองอยู่ในตัวแปร num1 และ num2
- ฟังก์ชัน calculateSum(int n1, int n2) ใช้คำนวณผลรวมต่ำสุดและสูงสุดหลังการแทนที่เลขหลัก
- ขั้นตอน:
- แทนที่เลข 4 ทั้งหมดในทั้งสองจำนวนด้วย 3 โดยเรียก replace(n1, 4, 3) และ replace(n2, 4, 3) แล้วคำนวณผลรวมต่ำสุด
- แทนที่เลข 3 ทั้งหมดในทั้งสองจำนวนด้วย 4 โดยเรียก replace(n1, 3, 4) และ replace(n2, 3, 4) แล้วคำนวณผลรวมสูงสุด
- ฟังก์ชัน replace(int x, int digit1, int digit2) แทนที่ digit1 ใน x ด้วย digit2 และคืนค่าเลขใหม่:
- ตัวแปร number เก็บเลขใหม่ เริ่มต้นที่ 0
- temp ใช้เป็นตัวคูณ 10 สำหรับแต่ละหลัก
- นำแต่ละหลักมาจากขวาไปซ้าย โดยหาร x ด้วย 10 และเก็บเศษใน rem
- ถ้า rem เท่ากับ digit1 ให้แทนที่ด้วย digit2 และบวกเข้า number = number + digit2 * temp
- มิฉะนั้น บวก rem เข้า number = number + rem * temp
- ลด x โดยหาร 10 และเพิ่ม temp = temp * 10
- คืนค่า number ที่ได้
โค้ดตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
// แทนที่ digit1 ด้วย digit2
int replace(int x, int digit1, int digit2) {
int number = 0;
int temp = 1;
while (x > 0) {
int rem = x % 10;
// พบเลขที่ต้องการแทนที่
if (rem == digit1)
number = number + digit2 * temp;
else
number = number + rem * temp;
temp *= 10;
x = x / 10;
}
return number;
}
void calculateSum(int n1, int n2) {
// แทนที่ 4 ด้วย 3
int num1 = replace(n1, 4, 3);
int num2 = replace(n2, 4, 3);
int minSum = num1 + num2;
// แทนที่ 3 ด้วย 4
num1 = replace(n1, 3, 4);
num2 = replace(n2, 3, 4);
int maxSum = num1 + num2;
cout << "Minimum Sum by digit replacement: " << minSum;
cout << "\nMaximum Sum by digit replacement: " << maxSum;
}
int main() {
int num1 = 3131, num2 = 4141;
calculateSum(num1, num2);
return 0;
}
ผลลัพธ์
Minimum Sum by digit replacement: 6262 Maximum Sum by digit replacement: 8282