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

Nam vừa được tặng một bộ đồ chơi có ra thanh gỗ, các thanh gỗ có độ dài là thị. Vốn yêu thích hình học nên Nam thường chọn các thanh gỗ bằng nhau để ghép thành các hình vuông

giúp mình giải với ngôn ngữ c++ nha
----- Nội dung dịch tự động từ ảnh -----
Nam vừa được tặng một bộ đồ chơi có ra thanh gỗ, các thanh gỗ có độ dài là thị, (với =1,2,..,n). Vốn yêu thích hình học nên Nam thường chọn các
thanh gỗ bằng nhau để ghép thành các hình vuông. Nam tự hỏi mình có thể tạo được hình vuông có diện tích lớn nhất là bao nhiều từ các thanh gỗ đang
có. Đề tăng độ khó, cậu ấy còn muốn biết thêm liệu có thể có bao nhiêu hình vuông như vậy?
Yêu cầu:
Hãy giúp Nam thực hiện tính toán của cậu ấy.
Dữ liệu:
• Dòng đầu tiên chứa số nguyên dương n(n < 10) - số lượng thanh gỗ.
• Trong n dòng tiếp theo sau, dòng thứ i chứa số nguyên dương đi(đi ≤ 10 ) - độ dài của các thanh gỗ tương ứng
Kết quả:
Ghi ra một đòng duy nhất ghi 2 số nguyên lần lượt là diện tích tối đa của hình vuông và số lượng hình vuông tạo được (2 số cách nhau bởi 1 khoảng trắng).
Nếu không có hình vuông nào tạo thành thì ghi ra −1
Ví dụ:
INPUT
753236mm
OUTPUT
91
2 Xem trả lời
Hỏi chi tiết
343
2
0
GUNTER OBERDORF ...
31/03/2024 22:54:57
+5đ tặng
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n;
    cin >> n;  // Số lượng thanh gỗ
    vector<int> lengths(n);  // Độ dài của các thanh gỗ

    // Nhập độ dài của các thanh gỗ
    for (int i = 0; i < n; ++i) {
        cin >> lengths[i];
    }

    // Sắp xếp các thanh gỗ theo thứ tự tăng dần
    sort(lengths.begin(), lengths.end());

    int max_side = -1;  // Độ dài cạnh hình vuông lớn nhất có thể tạo ra
    int num_squares = 0;  // Số lượng hình vuông tạo được

    // Duyệt qua từng cạnh potentional của hình vuông (từ 1 đến độ dài của thanh gỗ nhỏ nhất)
    for (int side = 1; side <= lengths[0]; ++side) {
        // Kiểm tra xem có thể tạo được hình vuông có cạnh là side không
        bool possible = true;
        for (int length : lengths) {
            if (length % side != 0) {
                possible = false;
                break;
            }
        }
        // Nếu có thể tạo được hình vuông, cập nhật thông tin
        if (possible) {
            num_squares = max_element(lengths.begin(), lengths.end()) - lengths.begin();
            max_side = side;
        }
    }

    // Tính diện tích của hình vuông lớn nhất và số lượng hình vuông tạo được
    int max_area = (max_side != -1) ? max_side * max_side : -1;

    // In kết quả
    cout << max_area << " " << num_squares << endl;

    return 0;
}

 

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
0
1
kiet
21/05/2024 18:39:09
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n;
    cin >> n;  // Số lượng thanh gỗ
    vector<int> lengths(n);  // Độ dài của các thanh gỗ

    // Nhập độ dài của các thanh gỗ
    for (int i = 0; i < n; ++i) {
        cin >> lengths[i];
    }

    // Sắp xếp các thanh gỗ theo thứ tự tăng dần
    sort(lengths.begin(), lengths.end());

    int max_side = -1;  // Độ dài cạnh hình vuông lớn nhất có thể tạo ra
    int num_squares = 0;  // Số lượng hình vuông tạo được

    // Duyệt qua từng cạnh potentional của hình vuông (từ 1 đến độ dài của thanh gỗ nhỏ nhất)
    for (int side = 1; side <= lengths[0]; ++side) {
        // Kiểm tra xem có thể tạo được hình vuông có cạnh là side không
        bool possible = true;
        for (int length : lengths) {
            if (length % side != 0) {
                possible = false;
                break;
            }
        }
        // Nếu có thể tạo được hình vuông, cập nhật thông tin
        if (possible) {
            num_squares = max_element(lengths.begin(), lengths.end()) - lengths.begin();
            max_side = side;
        }
    }

    // Tính diện tích của hình vuông lớn nhất và số lượng hình vuông tạo được
    int max_area = (max_side != -1) ? max_side * max_side : -1;

    // In kết quả
    cout << max_area << " " << num_squares << endl;

    return 0;
}

 

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

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
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×