Hướng dẫn giải của [200 đề thầy Đức] Bài 148: Tích của tổng hai phần trong dãy


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Chia dãy N số thành nửa trái gồm N/2 phần tử (lấy phần nguyên) và nửa phải gồm các phần tử còn lại, sau đó in tích của tổng hai nửa.

Cách làm

Với mỗi bộ dữ liệu, đọc N và dãy a. Tính nua = N / 2. Cộng a[0] đến a[nua - 1] vào biến trai, cộng a[nua] đến a[N - 1] vào biến phai. In trai * phai.

Bẫy: tổng mỗi nửa có thể khá lớn và tích của hai tổng có thể vượt quá giới hạn của kiểu int, nên dùng long long.

#include <bits/stdc++.h>
using namespace std;

int a[1005];

int main() {
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }
        // Nửa trái có n/2 phần tử, nửa phải là các phần tử còn lại
        int nua = n / 2;
        long long trai = 0, phai = 0;
        for (int i = 0; i < nua; i++) {
            trai += a[i];
        }
        for (int i = nua; i < n; i++) {
            phai += a[i];
        }
        // Tích có thể lớn nên dùng long long
        cout << trai * phai << "\n";
    }
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.