VT14 - Cặp đôi hoàn hảo (phiên bản 2)

Xem dạng PDF

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 2 phần tử ở vị trí khác nhau trong mảng sao cho tích của 2 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à  ~2 \le n \le 10^4~
  • ~|A_{i}| \le 10^4~

Output

Tích lớn nhất mà bạn tìm được

Sample

Input #1
5
1 2 3 4 5
Output #1
20

Bình luận

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



  • -1
    Vuer  đã bình luận lúc 20, Tháng 1, 2024, 4:55

    include<stdio.h>

    include<math.h>

    int main(){ int n; scanf("%d", &n); int a[n]; for(int i=0; i<n; i++){ scanf("%d", &a[i]); } int max=-pow(10,8); for(int i=0; i<n-1; i++){ for(int j=i+1; j<n; j++){ if((a[i]a[j])>max) max=a[i]a[j]; } } printf("%d", max); }


  • 0
    datcry4  đã bình luận lúc 12, Tháng 1, 2024, 13:46

    mọi người tham khảo nha, có đóng góp gì comment nha!

    include<stdio.h>

    define MAX 10000

    void In_Arry(int a[],int n){ for(int i=0;i<n;i++) scanf("%d",&a[i]); }

    void SapXep(int a[],int n){ int tmp=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(a[i]>a[j]){ tmp=a[i]; a[i]=a[j]; a[j]=tmp; } } } } int main(){ int n,a[MAX]; scanf("%d",&n); In_Arry(a,n); SapXep(a,n); int max = a[n-1]a[n-2],min =a[0]a[1]; if(max > min) printf("%d",max); else if(max <min)
    printf("%d",min); }


  • 2
    kitajima2910  đã bình luận lúc 30, Tháng 12, 2023, 4:07

    Chào các đạo hữu Java 8+ code đã AC 100%, có thể tham khảo cách làm của mình nhé :D , thấy hay cho xin up vote ạ!

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    /**
     *
     * @author Kitajima2910
     */
    public class VT14 {
    
        public static void main(String[] args) {
    
            Scanner sc = new Scanner(System.in);
    
            int n = sc.nextInt();
    
            // Xử lý nếu n == 2, để tránh tạo 2 mảng âm dương
            if (n == 2) {
                int product = 1;
                for (int i = 0; i < n; i++) {
                    product *= sc.nextInt();
                }
                System.out.println(product);
                return;
            }
    
            // Tạo ra 2 mảng âm dương 
            List<Integer> storeNegative = new ArrayList<>();
            List<Integer> storePostive = new ArrayList<>();
    
            for (int i = 0; i < n; i++) {
                int e = sc.nextInt();
    
                if (e < 0) {
                    storeNegative.add(e);
                } else {
                    storePostive.add(e);
                }
    
            }
    
            // Xử lý mảng âm
            int maxNegative = 0;
            int lenNegative = storeNegative.size();
            if (lenNegative >= 2) {
                // Mảng âm thì sort từ lớn đến bé (vì để xử lý âm bé nhất, khi nhân lại ra dương: âm * âm = dương)
                storeNegative.sort((a, b) -> -(a - b));
                maxNegative = storeNegative.get(lenNegative - 1) * storeNegative.get(lenNegative - 2);
            }
    
            // Xử lý mảng dương
            int maxPositive = 0;
            int lenPositive = storePostive.size();
            if (lenPositive >= 2) {
                // Mảng dương sort từ bé đến lớn
                storePostive.sort((a, b) -> a - b);
                maxPositive = storePostive.get(lenPositive - 1) * storePostive.get(lenPositive - 2);
            }
    
            int max = maxNegative >= maxPositive ? maxNegative : maxPositive;
    
            System.out.println(max);
    
        }
    
    }
    

  • 0
    quan2102  đã bình luận lúc 20, Tháng 12, 2023, 13:50

    testcase 8 la gi vay


  • -2
    Huxp  đã bình luận lúc 18, Tháng 12, 2023, 9:04

    cách làm là tìm max , min sau đó với mỗi i khác vị trị max và vị trí min , res = max(a[i] * max , a[i] * min)


    • 3
      thh  đã bình luận lúc 21, Tháng 1, 2024, 11:21

      Bạn chắc chưa

      include <bits/stdc++.h>

      define int long long

      using namespace std;

      int n, res = 0, a[10001]; void solve() {

      cin >> n;
      for(int i = 1;i <= n; ++i)
          cin >> a[i];
      sort(a + 1,a + n + 1);
      cout << max(a[1] * a[2], a[n - 1] * a[n]);
      

      } main() {

      ios_base::sync_with_stdio(false);
      cin.tie(nullptr);cout.tie(nullptr);
      
      solve();
      

      } cái này AC 100% nhé, ai thấy hay up vote giúp mik ik :))


      • 0
        24_Mingquan  đã bình luận lúc 18, Tháng 2, 2024, 12:21

        sory vote nham bn r


  • 0
    deno  đã bình luận lúc 13, Tháng 12, 2023, 16:40

    DENO :

    #include <stdio.h> #include <stdlib.h> int cmp(void const x,void const *y){ int *a=(int *)x; int *b=(int *)y; if(a>b)return 1; return -1; } int main(){ int n; scanf("%d",&n); int a[n]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } int sum=1; qsort(a,n,sizeof(int),cmp); for(int i=0;i<n;i++){ if((a[0]a[1])>(a[n-2]a[n-1])){ sum=a[0]a[1]; } else{ sum=a[n-2]*a[n-1]; } } printf("%d",sum); }


  • 0
    godcyber  đã bình luận lúc 6, Tháng 9, 2023, 9:13 chỉnh sửa

    GỢI Ý: BÀI KHÔNG YÊU CẦU GIỮ NGUYÊN VỊ TRÍ PHẦN TỬ NHƯ VT13

    Cách làm:

    sort rồi ktra tích hai phần tử đầu và tích hai phần tử cuối cái nào lớn hơn thì cout


    • 0
      tungkq123  đã bình luận lúc 29, Tháng 11, 2023, 8:51

      include<iostream>

      using namespace std; int main() { long long n, x[10005]; cin>>n; for(int i=0;i<n;i++) cin>>x[i];

      int max=x[0]*x[1];

      for(int i=0; i<n-1; i++) { for(int j=i+1; j<n; j++) if(max < x[i]x[j]) max = x[i]x[j]; }

      cout<<max; } , lam cach nay cung dc nha bn


  • -3
    nightfury1409  đã bình luận lúc 31, Tháng 8, 2023, 0:25

    bài này sort xog so sánh 2 phần tử đầu tiên của mảng với 2 phần tử cuối mảng là ok


  • -2
    vuonghao  đã bình luận lúc 24, Tháng 8, 2023, 13:11

    lỗi WA là gì vậy admid


  • -2
    Jett  đã bình luận lúc 21, Tháng 8, 2023, 14:10

    Của em bị báo lỗi RTE là lỗi gì vậy ạ? e xin cảm ơn!


    • 4
      Hieu Nguyen  đã bình luận lúc 21, Tháng 8, 2023, 14:42

      Thường là do truy xuất sai vùng nhớ em nhé, cụ thể trường hợp của em là cấp phát số lượng phần tử của mảng chỉ là 1000, trong khi bộ test đề bài yêu cầu tới ~10^4~, nên khi chạy chỉ số mảng trong for của em đã vượt quá phạm vi đã cấp phát.


      • -1
        Jett  đã bình luận lúc 22, Tháng 8, 2023, 3:47

        Em cảm ơn ạ!


  • -1
    bar190504  đã bình luận lúc 14, Tháng 8, 2023, 14:01

    test case 6 là gì vậy ạ


    • 0
      huyen33332025  đã bình luận lúc 19, Tháng 8, 2023, 17:01

      là dương âm âm (âm * âm = dương nên kết quả này lớn nhất nha bạn)