Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tổng lớn nhất và nhỏ nhất từ hai số với thay thế chữ số trong C++

Cho hai số nguyên dương num1 và num2. Mục tiêu là tìm tổng nhỏ nhất và lớn nhất có thể của hai số này sau khi thay thế chữ số trong cả hai. Chúng ta được phép thay thế chữ số từ mỗi số trong cả hai số. Ví dụ: num1 = 434, num2 = 324, ta có thể thay thế chữ số 3 bằng 4 và ngược lại. Khi đó tổng nhỏ nhất = 333 + 323 = 656, tổng lớn nhất = 444 + 424 = 864.

Ví dụ 1

Đầu vào: num1 = 3224, num2 = 4321

Đầu ra: Tổng lớn nhất: 8645, Tổng nhỏ nhất: 6544

Giải thích: Thay thế tất cả 3 bằng 4 để làm cho cả hai số lớn hơn (vì 4 > 3). num1 thành 4224, num2 thành 4421, tổng = 8645. Thay thế tất cả 4 bằng 3 để làm cho cả hai số nhỏ hơn (vì 3 < 4). num1 thành 3223, num2 thành 3321, tổng = 6544.

Ví dụ 2

Đầu vào: num1 = 3111, num2 = 4111

Đầu ra: Tổng lớn nhất: 8222, Tổng nhỏ nhất: 6222

Giải thích: Thay thế 3 bằng 4: num1 = 4111, num2 = 4111, tổng = 8222. Thay thế 4 bằng 3: num1 = 3111, num2 = 3111, tổng = 6222.

Phương pháp trong chương trình

  • Hai số nằm trong biến num1 và num2.
  • Hàm calculateSum(int n1, int n2) tính tổng min và max sau thay thế chữ số.
  • Thay thế mọi chữ số 4 bằng 3 trong cả hai số, lưu vào num1, num2 bằng replace(n1,4,3) và replace(n2,4,3). Tính tổng nhỏ nhất.
  • Tương tự, thay thế 3 bằng 4 bằng replace(n1,3,4) và replace(n2,3,4) để tính tổng lớn nhất.
  • Hàm replace(int x, int digit1, int digit2) thay thế mọi digit1 trong x bằng digit2 và trả về số mới.
  • Biến number lưu số mới, khởi tạo 0. temp lưu hệ số nhân 10 mỗi vòng lặp.
  • Lấy từng chữ số từ phải qua trái bằng chia 10, dư lưu trong rem.
  • Nếu rem == digit1, thay bằng digit2. Cộng vào number = number + digit2 * temp.
  • Ngược lại, number = number + rem * temp.
  • Giảm x bằng chia 10, tăng temp *= 10.
  • Trả về number.

Mã ví dụ

#include <bits/stdc++.h>
using namespace std;

// Thay thế digit1 bằng digit2
int replace(int x, int digit1, int digit2) {
    int number = 0;
    int temp = 1;
    while (x > 0) {
        int rem = x % 10;
        // Tìm thấy chữ số cần thiết, thay thế
        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) {
    // Thay 4 bằng 3
    int num1 = replace(n1, 4, 3);
    int num2 = replace(n2, 4, 3);
    int minSum = num1 + num2;
    // Thay 3 bằng 4
    num1 = replace(n1, 3, 4);
    num2 = replace(n2, 3, 4);
    int maxSum = num1 + num2;
    std::cout << "Tổng nhỏ nhất bằng thay thế chữ số: " << minSum;
    std::cout << "\nTổng lớn nhất bằng thay thế chữ số: " << maxSum;
}

int main() {
    int num1 = 3131, num2 = 4141;
    calculateSum(num1, num2);
    return 0;
}

Đầu ra

Tổng nhỏ nhất bằng thay thế chữ số: 6262
Tổng lớn nhất bằng thay thế chữ số: 8282