Trang chủ Tin Học Lớp 9 Bài 3. Tích lớn nhất Cho dãy A gồm N số nguyên Ai, A,,..., An (3≤N≤10000). Các A (1sisN) có...
Câu hỏi :

giúp đỡ tuiiiii nhaaaaaaaaaaaaaaaaaaaaaaaa

image

Bài 3. Tích lớn nhất Cho dãy A gồm N số nguyên Ai, A,,..., An (3≤N≤10000). Các A (1sisN) có giá trị tuyệt đối không vượt quá 3000. Yêu cầu: Hãy tìm 3 số tr

Lời giải 1 :

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

#define ll long long

// TH1: 3 số dương
ll Max1(ll a[], ll n) {
    sort(a + 1, a + n + 1);
    ll Max = a[n] * a[n - 1] * a[n - 2];
    return Max;
}

// TH2: 2 số âm 1 số dương
ll Max2(ll a[], ll n) {
    sort(a + 1, a + n + 1);
    ll Max = a[1] * a[2] * a[n];
    return Max;
}

ll a[10000],b[10000];
int main() {
    ll n;
    cin >> n;

    for (ll i = 1; i <= n; i++)
        cin >> a[i];
    for (ll i = 1; i <= n; i++)
         b[i]=a[i];
    sort(a+1,a+n+1);
    ll max4 = Max1(a, n);
    ll max5 = Max2(a, n);
    if(max(max4,max5)==max4){
       ll max1,max2,max3;
       max1=a[n];
       max2=a[n-1];
       max3=a[n-2];
       for(int i=1;i<=n;i++)
        if(b[i]==max1||b[i]==max2||b[i]==max3)
          cout<<b[i]<<" ";
       return 0;

    }
     if(max(max4,max5)==max5){
       ll max1,max2,max3;
       max1=a[n];
       max2=a[1];
       max3=a[2];
       for(int i=1;i<=n;i++)
        if(b[i]==max1||b[i]==max2||b[i]==max3)
          cout<<b[i]<<" ";
       return 0;

    }

    return 0;
}

Lời giải 2 :

Thuật toán

Không mất tính tổng quát, giả sử $A_1 \leq A_2 \leq A_3 \leq \ldots \leq A_N$

Nhận xét: Ta chỉ cần quan tâm tới $3$ số lớn nhất ($A_{N-2}, A_{N-1}, A_N$) và $3$ số nhỏ nhất ($A_1, A_2, A_3$) của dãy số đã cho.

Do đó, ta chỉ cần cho $6$ số (ít hơn nếu $N < 6$) vào một mảng, sau đó duyệt trâu là xong.

Lưu ý: Do đề bài không đề cập gì đến thứ tự các số được in ra nên code của mình chỉ in ra thứ tự bất kỳ.

Code (C++)

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

int n, a[10005], sz, x, y, z;
// Tranh tran so
long long ans, six[6];

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    /* Nhap vao N tren dong dau
    Dong 2 nhap vao day A voi cac phan tu cach nhau boi dau cach */
    cin >> n;
    for(int i=1;i<=n;i++) cin >> a[i];
    sort(a+1,a+n+1);
    for(int i=1;i<=3;i++) six[i-1] = a[i];
    for(int i=n;i>=max(n-2, 4);i--) six[3+n-i] = a[i];
    sz = min(5, n-1);
    ans = 0;
    for(int i=0;i<=sz-2;i++) for(int j=i+1;j<=sz-1;j++) for(int k=j+1;k<=sz;k++){
        if(ans < six[i] * six[j] * six[k]){
            ans = six[i] * six[j] * six[k];
            x = six[i]; y = six[j]; z = six[k];
        }
    }
    cout << x << ' ' << y << ' ' << z;
    return 0;
}

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, chúng ta sắp phải bước vào một kỳ thi căng thẳng và sắp chia tay bạn bè, thầy cô. Áp lực từ kỳ vọng của phụ huynh và tương lai lên cấp 3 thật là lớn, nhưng hãy tin vào bản thân và giữ vững sự tự tin!

Nguồn :

sưu tập

Copyright © 2024 Giai BT SGK