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.
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