Bài 4. Trò chơi Tên chương trình: TROCHOI.CPP
Tít và Mít đang chơi một trò chơi như sau: Tít chọn các số tự nhiên từ 𝐴 đến 𝐵, Mít
chọn các số tự nhiên từ 𝐶 đến 𝐷.
Yêu cầu: Hãy lập trình để đếm xem có bao nhiêu số tự nhiên chỉ có một trong hai bạn
chọn.
INPUT: Nhập vào bốn số tự nhiên 𝐴, 𝐵, 𝐶,𝐷 (𝐴, 𝐵, 𝐶,𝐷 ≤ 109
, 𝐴 < 𝐵, 𝐶 < 𝐷). Mỗi số
trên một dòng.
OUTPUT: Ghi ra số lượng số chỉ có một trong hai bạn chọn.
Ví dụ:
INPUT OUTPUT
3
6
4
9
4
Quảng cáo
1 câu trả lời 163
Để giải bài toán này, bạn cần đếm số lượng số tự nhiên chỉ xuất hiện trong một trong hai khoảng số mà hai người chọn. Dưới đây là cách tiếp cận và lập trình bằng ngôn ngữ C++ để thực hiện yêu cầu này.
### Phân tích bài toán
1. **Nhập dữ liệu**: Bạn cần nhập bốn số nguyên \(A\), \(B\), \(C\), và \(D\), trong đó \(A\) và \(B\) xác định khoảng từ \(A\) đến \(B\) mà Tít chọn, và \(C\) và \(D\) xác định khoảng từ \(C\) đến \(D\) mà Mít chọn.
2. **Xác định phạm vi các số**:
- Khoảng số của Tít là từ \(A\) đến \(B\).
- Khoảng số của Mít là từ \(C\) đến \(D\).
3. **Đếm các số chỉ xuất hiện trong một khoảng**:
- Các số chỉ xuất hiện trong khoảng của Tít nhưng không xuất hiện trong khoảng của Mít.
- Các số chỉ xuất hiện trong khoảng của Mít nhưng không xuất hiện trong khoảng của Tít.
### C++ Code
Dưới đây là chương trình C++ để thực hiện yêu cầu:
```cpp
#include <iostream>
#include <algorithm> // For max and min functions
int main() {
// Khai báo biến
long long A, B, C, D;
// Nhập dữ liệu
std::cin >> A >> B >> C >> D;
// Tính các khoảng
long long startT = A;
long long endT = B;
long long startM = C;
long long endM = D;
// Tính các số chỉ thuộc một trong hai khoảng
// Tính số lượng số thuộc khoảng của Tít nhưng không thuộc khoảng của Mít
long long countOnlyT = std::max(0LL, std::min(endT, endM) - std::max(startT, startM) + 1);
if (startM <= endT && endM >= startT) {
countOnlyT -= std::max(0LL, std::min(endT, endM) - std::max(startT, startM) + 1);
}
// Tính số lượng số thuộc khoảng của Mít nhưng không thuộc khoảng của Tít
long long countOnlyM = std::max(0LL, std::min(endM, endT) - std::max(startM, startT) + 1);
if (startT <= endM && endT >= startM) {
countOnlyM -= std::max(0LL, std::min(endM, endT) - std::max(startM, startT) + 1);
}
// Tính tổng số lượng số chỉ thuộc một trong hai khoảng
long long result = (endT - startT + 1) + (endM - startM + 1) - 2 * std::max(0LL, countOnlyT);
// Xuất kết quả
std::cout << result << std::endl;
return 0;
}
```
### Giải thích
- `std::max(0LL, ...)` đảm bảo rằng không có số âm khi tính số lượng số trong các khoảng.
- `countOnlyT` và `countOnlyM` tính số lượng số chỉ thuộc vào khoảng của Tít hoặc Mít nhưng không bị chồng lấn.
- `result` tính tổng số lượng số chỉ có trong một khoảng trong cả hai khoảng.
Lưu ý: Mặc dù bài toán có thể yêu cầu xử lý các số rất lớn, việc sử dụng kiểu `long long` và các hàm chuẩn giúp đảm bảo tính chính xác và hiệu quả.
Quảng cáo
Bạn cần hỏi gì?
Câu hỏi hot cùng chủ đề
-
Đã trả lời bởi chuyên gia
55319 -
Đã trả lời bởi chuyên gia
31180 -
Đã trả lời bởi chuyên gia
29757
