Bài tập  /  Bài đang cần trả lời

Nam vừa được tặng bộ đồ chơi có n thanh gỗ, các thanh gỗ độ dài là ai (với i = 1, 2, ..., n)

C++ nha mn
2 trả lời
Hỏi chi tiết
25
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Dưới đây là một giải pháp bằng C++ cho bài toán mà bạn đã mô tả:

```cpp
#include
#include
#include
#include

using namespace std;

int main() {
int n;
cin >> n;

vector lengths(n);
for (int i = 0; i < n; ++i) {
cin >> lengths[i];
}

map squares;

// Đếm số thanh gỗ
for (int length : lengths) {
squares[length]++;
}

int maxArea = -1;
int numSquares = 0;

// Tìm số lượng hình vuông và diện tích lớn nhất
for (const auto& [side, count] : squares) {
int pairs = count / 2; // Mỗi hình vuông cần 2 thanh gỗ

if (pairs > 0) {
numSquares += pairs;
maxArea = max(maxArea, side * side * pairs);
}
}

// In ra kết quả
if (maxArea == -1) {
cout << -1 << endl;
} else {
cout << maxArea << " " << numSquares << endl;
}

return 0;
}
```

### Giải thích code:
1. **Nhập số thanh gỗ**: Chương trình nhận vào số lượng thanh gỗ n và độ dài của từng thanh.
2. **Đếm số thanh giống nhau**: Sử dụng một `map` để đếm số lượng thanh gỗ có cùng độ dài.
3. **Tính số hình vuông**: Kiểm tra từng độ dài trong `map`, mỗi độ dài có thể tạo ra bao nhiêu hình vuông (cần có ít nhất 2 thanh).
4. **Tính diện tích tối đa và số hình vuông**: Tính số hình vuông có thể tạo và cập nhật diện tích lớn nhất.
5. **Kết quả**: In ra diện tích tối đa và số hình vuông, hoặc -1 nếu không thể tạo hình vuông nào.

### Ví dụ:
- **Input**:
```
7
1 1 1 2 2 3 3
```
- **Output**:
```
4 2
```

Chúc bạn học tập tốt với C++!
1
0
_ღĐức Phátღ_
23/11 19:40:33
+5đ tặng

1. Xử lý đầu vào:
+ Đọc số lượng thanh gỗ nnn.
+ Đọc các độ dài aia_iai​.
2. Phân tích bài toán:
+ Tìm số lượng thanh có cùng độ dài để tạo thành các cạnh của hình vuông.
+ Với mỗi độ dài, nếu có đủ 4 thanh, bạn có thể tạo được một hình vuông.
+ Diện tích hình vuông là cạnh2\text{cạnh}^2cạnh2.
3. Các bước thực hiện:
+ Đếm số lượng từng độ dài aia_iai​.
+ Chọn độ dài lớn nhất có thể tạo thành ít nhất 4 thanh (ưu tiên độ dài lớn nhất trước).
+ Tính diện tích hình vuông tối đa và số lượng hình vuông có thể tạo được.
4. Xuất kết quả:
+ Nếu không tạo được hình vuông nào, in -1.
+ Nếu tạo được, in diện tích tối đa và số lượng hình vuông.

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập
1
0
Duy Lê
24/11 18:05:51
+4đ tặng
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> blocks(n);
for (int i = 0; i < n; i++) {
cin >> blocks[i];
} sort(blocks.begin(), blocks.end());
int maxside = 0;
for (int i = 0; i < n; i++) {
if (count(blocks.begin(), blocks.end(), blocks[i]) >= 4) {
maxside = blocks[i];
break;
}
}
int count = 0;
for (int i = n - 1; i >= 0; i--) {
if (blocks[i] == maxside){
count += count(blocks.begin(), blocks.end(), maxside) / 4;
break;
}
}
if (maxside == 0) {
cout << -1 << endl;
}
else {
cout << maxside << " " << count << endl;
}
return 0;
}
Duy Lê
chấm điểm cho tớ với ạ

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm
Bài tập liên quan
Bài tập Lập trình Lớp 8 mới nhất
Trắc nghiệm Lập trình Lớp 8 mới nhất

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường

Học ngoại ngữ với Flashcard

×
Trợ lý ảo Trợ lý ảo
×
Gia sư Lazi Gia sư