Theo đơn đặt hàng, công ty Beta sẽ nhận n kiện hàng. Các kiện hàng được
đánh số thứ tự từ 1 đến n, kiện hàng thứ i có khối lượng ai. Để việc sắp xếp hàng
vào kho được khoa học và hợp lí, công ty đã tiến hành phân nhóm các kiện hàng
theo khối lượng, những kiện hàng nào có cùng khối lượng thì được xếp vào một
nhóm. Do số lượng các kiện hàng nhiều nên công ty không thể làm bằng tay được,
bạn hãy giúp công ty Beta phân nhóm các kiện hàng và cho biết số kiện hàng
nhiều nhất có cùng khối lượng là bao nhiêu?
Dữ liệu vào:
Đọc từ tệp nhanhang.inp gồm hai dòng:
- Dòng thứ nhất chứa số nguyên dương n (1<=n<=10^5)
- Dòng thứ hai chứa n số nguyên dương ai (1<=a[i]<=10^7)
các số cách nhau bởi một
dấu cách.
(C++)
Quảng cáo
2 câu trả lời 329
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
// Sắp xếp các kiện hàng theo khối lượng
sort(a.begin(), a.end());
// Đếm số lượng kiện hàng có cùng khối lượng
map<int, int> counts;
for (int x : a) {
counts[x]++;
}
// Tìm số lượng kiện hàng nhiều nhất có cùng khối lượng
int max_count = 0;
for (auto const& [key, val] : counts) {
max_count = max(max_count, val);
}
cout << max_count << endl;
return 0;
}
Giải thích:
Đọc dữ liệu:
Chương trình đọc số lượng kiện hàng n và khối lượng của từng kiện hàng a[i] từ tệp tin nhanhang.inp.
Sắp xếp:
Sử dụng hàm sort để sắp xếp các kiện hàng theo khối lượng tăng dần. Việc này giúp nhóm các kiện hàng có cùng khối lượng lại với nhau.
Đếm số lượng:
Sử dụng một map (trong C++) để lưu trữ số lượng kiện hàng cho mỗi khối lượng khác nhau. Duyệt qua mảng a đã sắp xếp, với mỗi khối lượng x, tăng giá trị đếm tương ứng trong counts.
Tìm giá trị lớn nhất:
Duyệt qua map counts, tìm giá trị đếm lớn nhất và lưu vào biến max_count.
In kết quả:
In ra giá trị max_count, là số lượng kiện hàng nhiều nhất có cùng khối lượng.
Để giải bài toán phân nhóm kiện hàng theo khối lượng, ta có thể sử dụng một cấu trúc dữ liệu thích hợp như `unordered_map` trong C++ để đếm số lượng kiện hàng có cùng khối lượng. Sau đó, ta sẽ tìm khối lượng có số kiện hàng nhiều nhất.
Dưới đây là một mẫu chương trình C++ để thực hiện yêu cầu này:
```cpp
#include
#include
#include
int main() {
std::ifstream fin("nhiang.inp"); // Mở tệp dữ liệu đầu vào
std::ofstream fout("nhiang.out"); // Mở tệp dữ liệu đầu ra
int n;
fin >> n; // Đọc số lượng kiện hàng
std::unordered_map weightCount; // Bảng đếm số kiện hàng theo khối lượng
// Đọc khối lượng của các kiện hàng và cập nhật bảng đếm
for (int i = 0; i < n; ++i) {
int weight;
fin >> weight;
weightCount[weight]++;
}
// Tìm khối lượng có số kiện hàng nhiều nhất
int maxCount = 0;
for (const auto& pair : weightCount) {
if (pair.second > maxCount) {
maxCount = pair.second;
}
}
// Ghi kết quả vào tệp đầu ra
fout << maxCount << std::endl;
// Đóng các tệp
fin.close();
fout.close();
return 0;
}
```
### Giải thích chương trình:
1. **Thư viện sử dụng:** Chương trình sử dụng các thư viện ``, ``, và `` để làm việc với đầu vào/đầu ra và lưu trữ số liệu.
2. **Đọc dữ liệu từ tệp:** Dữ liệu được đọc từ tệp `nhiang.inp` với số lượng kiện hàng `n` và khối lượng của từng kiện hàng được lưu trữ trong một bảng đếm (`weightCount`).
3. **Đếm số kiện hàng theo khối lượng:** Sử dụng `unordered_map` để đếm số lượng kiện hàng cho mỗi khối lượng.
4. **Tìm số kiện hàng nhiều nhất:** Duyệt qua bảng đếm để tìm số lượng kiện hàng có cùng khối lượng nhiều nhất.
5. **Ghi kết quả:** Kết quả được ghi vào tệp `nhiang.out`.
### Lưu ý:
- Đảm bảo rằng bạn có một tệp `nhiang.inp` để chương trình có thể đọc dữ liệu.
- Kết quả sẽ được ghi vào tệp `nhiang.out`.
Quảng cáo
Bạn muốn hỏi bài tập?
Câu hỏi hot cùng chủ đề
-
107278
-
Hỏi từ APP VIETJACK67830
-
44998
-
38171
