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

Chia số lớn thành hai phần chênh lệch k trong C++

Giới thiệu

Cho tổng n và hiệu k, tìm hai số a, b thỏa mãn: a + b = n và a - b = k.

Giải hệ phương trình

a + b = n
a - b = k
--------- (+)
2a = n + k  →  a = (n + k) / 2
b = n - a

Ví dụ

n = 100, k = 30 → a = 65, b = 35 (65+35=100, 65-35=30)

n = 54, k = 12 → a = 33, b = 21 (33+21=54, 33-21=12)

Mã nguồn hoàn chỉnh

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

void divideTheNumber(int n, int k) {
    double a = (n + k) / 2.0;
    double b = n - a;
    cout << a << " " << b << endl;
}

int main() {
    int n = 54, k = 12;
    divideTheNumber(n, k);
    return 0;
}

Kết quả chạy chương trình

33 21

Điều kiện tồn tại nghiệm nguyên

Để a, b là số nguyên: n + k phải chẵn (tức n và k cùng chẵn hoặc cùng lẻ).

Phiên bản kiểm tra tính hợp lệ

bool divideNumberWithDifference(int n, int k, int &a, int &b) {
    if ((n + k) % 2 != 0) {
        return false; // Không có nghiệm nguyên
    }
    a = (n + k) / 2;
    b = n - a;
    return true;
}

int main() {
    int n = 100, k = 30;
    int a, b;
    if (divideNumberWithDifference(n, k, a, b)) {
        cout << "a = " << a << ", b = " << b << endl;
    } else {
        cout << "Khong co nghiem nguyen" << endl;
    }
    return 0;
}

Phân tích độ phức tạp

  • Thời gian: O(1)
  • Không gian: O(1)

Ứng dụng

  • Phân bổ tài nguyên với ràng buộc chênh lệch
  • Bài toán cân bằng tải (load balancing)
  • Chia kế thừa, chia lợi nhuận với điều kiện

Kết luận

Bài toán giải hệ phương trình bậc nhất 2 ẩn cơ bản, ứng dụng rộng rãi trong phân bổ tài nguyên với ràng buộc chênh lệch.