Giới thiệu
Chia một số nguyên n thành hai phần a và b sao cho a + b = n. Cách đơn giản nhất: a = n/2 (chia nguyên), b = n - a.
Ví dụ
n = 13 → a = 6, b = 7 (6 + 7 = 13)
n = 10 → a = 5, b = 5 (5 + 5 = 10)
Mã nguồn hoàn chỉnh
#include <bits/stdc++.h>
using namespace std;
void divideTheNumber(int n) {
int a = n / 2; // Chia nguyên (làm tròn xuống)
int b = n - a; // Phần bù để a + b = n
cout << a << " " << b << endl;
}
int main() {
int n = 13;
divideTheNumber(n);
return 0;
}
Kết quả chạy chương trình
6 7
Phân tích
| n | a = n/2 | b = n-a | a+b | Chênh lệch |a-b| |
|---|---|---|---|---|
| 10 | 5 | 5 | 10 | 0 |
| 11 | 5 | 6 | 11 | 1 |
| 12 | 6 | 6 | 12 | 0 |
| 13 | 6 | 7 | 13 | 1 |
| 14 | 7 | 7 | 14 | 0 |
Đặc điểm: Hai phần chênh lệch nhau tối đa 1 đơn vị.
Phân tích độ phức tạp
- Thời gian: O(1)
- Không gian: O(1)
Mở rộng: Chia thành k phần
void divideIntoKParts(int n, int k) {
int base = n / k;
int remainder = n % k;
for (int i = 0; i < k; i++) {
int part = base + (i < remainder ? 1 : 0);
cout << part << " ";
}
cout << endl;
}
// Ví dụ: divideIntoKParts(13, 3) → 5 4 4 (tổng = 13)
Kết luận
Phép chia số nguyên đơn giản nhưng là nền tảng cho nhiều thuật toán phân chia (load balancing, chia dữ liệu, phân trang, v.v.).