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

การหาผลรวมสูงสุดและต่ำสุดจากสองจำนวนด้วยการแทนที่เลขหลักใน C++

เราได้รับจำนวนบวกสองจำนวน 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) ใช้คำนวณผลรวมต่ำสุดและสูงสุดหลังการแทนที่เลขหลัก
  • ขั้นตอน:
    1. แทนที่เลข 4 ทั้งหมดในทั้งสองจำนวนด้วย 3 โดยเรียก replace(n1, 4, 3) และ replace(n2, 4, 3) แล้วคำนวณผลรวมต่ำสุด
    2. แทนที่เลข 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