Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift
Cho mảng số nguyên ~A~ có ~n~ phần tử được nhập từ bàn phím. Hãy viết chương trình tìm 3 phần tử ở các vị trí khác nhau trong mảng sao cho tích của 3 phần tử đó là lớn nhất. Sau đó, hãy in giá trị tích lớn nhất mà bạn tìm được lên màn hình
Input
- Dòng 1 là số lượng phần tử của mảng ~n~
- Dòng tiếp theo là ~n~ số nguyên tương ứng là các phần tử của mảng
Biết rằng
- ~n \in N^*~ và ~3 \le n \le 10^4~
- ~|A_{ij}| \le 1000~
Output
Tích lớn nhất mà bạn tìm được
Sample
Input #1
5
1 2 3 4 5
Output #1
60
Bình luận
mời các bạn tham khảo
include <bits/stdc++.h>
const int N=1e6; using namespace std; long long n,a[N],A,B,C,D; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+n+1); A=a[n]a[n-1]a[n-2]; B=a[1]a[2]a[3]; C=a[1]a[2]a[n]; D=a[n]a[n-1]a[1]; cout<<max(A,max(B,max(C,D))); return 0; return 0; }
11
*~$$[user:
strong text
`
$$~*]
include<bits/stdc++.h>
using namespace std; int a[10000],n; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n,greater<int>()); cout<<a[1]a[2]a[3]; }
using namespace std; typedef long long ll; ll n; int main() { ios::syncwithstdio(false); cin.tie(nullptr); cout.tie(nullptr); ll m1,m2; cin >> n; vector<ll> main; for (ll i = 0; i < n; i++) { ll x; cin >> x; main.push_back(x); } sort(main.begin(),main.end()); m1 = main[n-1]main[n-2]main[n-3]; m2 = main[0]main[1]main[n-1]; if (m1 > m2) cout << m1 << ""; else cout << m2 << ""; }
Đây là code full AC của mình:
Giải thích: Chắc các bạn cũng đã làm qua cái bài tổng lớn nhất, tích lớn nhất của hai số trước khi qua làm bài này rồi. Ở các bài trước, đối với bài tích lớn nhất của hai số, ý tưởng của nó chỉ là sắp xếp mảng tăng dần(có thể dùng hàm sort()) rồi so sánh tích của 2 phần tử cuối và phần tử đầu. Vì khi mảng toàn dương thì dĩ nhiên 2 phần tử đầu khi nhân với nhau sẽ nhỏ hơn 2 phần tử cuối nhân với nhau, còn khi mảng có âm, thì sẽ dùng hàm max để so sánh cho gọn. Vì khi 2 phần tử âm nhân với nhau ra âm thì lại so sánh với 2 dương lớn nhất ở cuối mảng. Còn ở bài này, vì tận 3 số nên có nhiều trường hợp xảy ra. Nếu chỉ toàn dương thì không có gì để nói, làm tương tự như trên nhưng chỉ nhân thêm phần tử liền kề. Nhưng lỡ như mảng có phần tử âm thì sao. 2 âm nhân lại ra dương nhưng lại nhân 1 âm nữa lại thành âm nên khó so sánh(hoặc là chỉ có 2 âm). Nên ý tưởng của mình là như thế này, các bạn sẽ lấy sắp xếp tăng dần như bình thường rồi so sánh phần 2 phần tử đầu nhân với phần tử cuối(vì nếu âm thì 2 phần tử đầu sẽ âm sẽ ra dương thì so sánh bình thường, nếu không thì 2 âm nhân nhau ra dương lại nhân với phần tử cuối chắc chắn dương thì sẽ ra dương), còn ở vế sau thì chỉ cần so sánh 3 phần tử liền kề cuối mảng là được.
minh xep theo giam dan a.sort(reverse=True) xong so sanh 2 cai max(a)a[1]a[2], min(a)max(a)a[len(a)-2] do neu co 2 so am nhan lai thi no ra duong ma ta lay cai duong do nhan cho max nua thif no la lon nhat
include <iostream>
include <algorithm>
using namespace std;
int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) { cin >> arr[i]; } sort(arr, arr + n); int maxproduct = max(arr[0] * arr[1] * arr[n - 1], arr[n - 1] * arr[n - 2] * arr[n - 3]); cout << maxproduct << endl; return 0; }
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
test 10 là gì vậy mn
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
hướng dẫn: bước 1: sắp xếp mảng tăng dần; bước 2:do mảng có |a[i]| nên a[i] có thể âm => tìm max của 2 bộ số a[1] * a[2] * a[n] hoặc a[n-2] * a[n-1] * a[n]
mn cho e xin ý tưởng bài này được không ạ :(
sắp xếp lại mảng từ bé đến lớn rồi so sánh tích của 3 phần tử cuối với tích của 2 phần tử đầu tiên với phần tử cuối, cái nào lớn hơn thì in ra
không được bạn nhé, có phần tử âm là sai, các bạn lên xem hướng dẫn của mình đi full AC
cho mình hỏi so sánh 2 phần tử đầu lmj v ạ
Mảng có phần tử âm là toang đấy.
ghê thế thanks
Hay phết :v thế mà không nghĩ ra