MINMAX - Số bé nhất và số lớn nhất

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ột dãy gồm ~n~ số nguyên, tìm phần tử bé nhất và lớn nhất trong dãy.

Input

  • Dòng đầu tiên chứa duy nhất một số nguyên dương ~n~ (số phần tử trong dãy).
  • Dòng thứ hai chứa n số nguyên là các phần tử ~a_1,a_2,…,a_n~

Giới hạn:

  • ~1≤n≤10^5,-10^9≤a_i≤10^9~

Output

  • In ra trên một dòng bốn số theo thứ tự như sau: số bé nhất, vị trí số bé nhất, số lớn nhất, vị trí của số lớn nhất (các số cách nhau bởi một dấu cách).

Chú ý:

  • Nếu có nhiều số bằng nhau và cùng bé nhất thì chọn số xuất hiện đầu tiên (tương tự đối với số lớn nhất)
  • Vị trí tính từ ~1~

Sample

Input #1
5
2 1 1 2 3
Output #1
1 2 3 5
Input #2
5
3 1 3 1 2
Output #2
1 2 3 1

Problem source: Chuyên Sơn La Online Judge


Bình luận

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



  • -1
    gtmailong  đã bình luận lúc 23, Tháng 4, 2024, 17:07 chỉnh sửa

    c++

    #include <iostream>
    using namespace std;
    
    int main() {
        int n,x;
        cin >> n;
        cin >> x;
        int MAX = x, MIN = x, PosMAX = 1, PosMin = 1;
        for (int i = 1; i < n; i++) {
            cin >> x;
            if (x > MAX){
                MAX = x;
                PosMAX = i+1;
            }
            if (x < MIN) {
                MIN = x;
                PosMin = i+1;
            }
        }
        cout << MIN << " " << PosMin << " " << MAX << " " << PosMAX;
        return 0;
    }
    

  • 1
    thangok  đã bình luận lúc 25, Tháng 2, 2024, 4:01
    • Ae tham khảo %%

      include<bits/stdc++.h>

    using namespace std; int main() { int n; cin>>n; int a[n]; for(int i=1;i<=n;i++) { cin>>a[i]; } int maxx=-1e9; int vt; int minn=1e9; int vt2; for(int i=1;i<=n;i++) { if(minn>a[i]&&minn!=a[i]) { minn=a[i]; vt2=i; } if(maxx<a[i]&&maxx!=a[i]) { maxx=a[i]; vt=i; } } cout<<minn<<" "<<vt2<<" "<<maxx<<" "<<vt; return 0; }


  • 0
    thinhec12012007__  đã bình luận lúc 19, Tháng 2, 2024, 8:00

    Code mình đã AC :

    include <bits/stdc++.h>

    const int N=1e5+7; const long long gan=-1e9+7; using namespace std; int n,maxx=gan,minn=1e9+1,vt1,vt2; int a[N]; int main() { iosbase::syncwith_stdio(false); cin.tie();cout.tie(); cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; if(a[i]>maxx) {maxx=a[i];vt1=i;} if(a[i]<minn) {minn=a[i];vt2=i;} } cout<<minn<< " "<<vt2<< " "<<maxx<< " "<<vt1;

    return 0;
    

    }


  • 0
    thinhec12012007__  đã bình luận lúc 19, Tháng 2, 2024, 7:59

    Bài này mn chỉ cần làm đơn giản là : cho max là giá trị bé nhất(nhỏ hơn giá trị bé nhất trong mảng), cho min là giá trị lớn nhất(lớn hơn giá trị lớn nhất trong mảng) sau đó mn chỉ cần kt hai biến max và min và lưu lại vị trí của max và min là đc


  • 0
    ngusidan123  đã bình luận lúc 9, Tháng 2, 2024, 8:08

    duyệt ngược từ i=n-1 > i=0 sau đó dùng map để đánh dấu map[a[i]] = i+1 . rồi sắp xếp tăng dần sau cùng in ra a[0] map[a[0]] a[n-1] map[a[n-1]]


  • 0
    thh  đã bình luận lúc 4, Tháng 2, 2024, 5:27

    Ý tưởng: Nhập toàn bộ dãy rồi kiểm tra từng số và so sánh lấy vị trí mất ~O(2n)~ do phải nhập cả dãy.

    Cách làm: Ta nhập số n và so sánh lấy luôn giá trị và vị trí xong in ra kq mất ~O(n)~

    pragma GCC optimize("O3","unroll-loops")

    pragma GCC target("avx2")

    include<bits/stdc++.h>

    using namespace std;

    define int long long

    define supermax 1e18

    int n,num; int maxn = -supermax, minn = supermax, mxpos = 0, mnpos = 0;

    void solve() {

    cin >> n;
    for(int i = 1;i <= n; ++i)
    {
        cin >> num;
        if(num > maxn)
        {
            maxn = num;
            mxpos = i;
        }
        if(num < minn)
        {
            minn = num;
            mnpos = i;
        }
    }
    cout << minn << ' ' << mnpos << ' ' << maxn << ' ' << mxpos;
    

    } main() {

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

    }


    • 0
      thh  đã bình luận lúc 4, Tháng 2, 2024, 5:30

      Ai thấy hay cho mik xin 1 upvote nhé


  • 2
    hohoanghai5042011  đã bình luận lúc 20, Tháng 1, 2024, 6:02

    Nhập số phần tử trong dãy

    n = int(input())

    Nhập dãy số

    arr = list(map(int, input().split()))

    Khởi tạo giá trị cho số bé nhất và lớn nhất, cũng như vị trí tương ứng

    minvalue = float('inf') maxvalue = float('-inf') minposition = -1 maxposition = -1

    Duyệt qua từng phần tử trong dãy

    for i in range(n): # Kiểm tra và cập nhật số bé nhất và vị trí if arr[i] < minvalue: minvalue = arr[i] min_position = i + 1

    # Kiểm tra và cập nhật số lớn nhất và vị trí
    if arr[i] > max_value:
        max_value = arr[i]
        max_position = i + 1
    

    In ra kết quả

    print(minvalue, minposition, maxvalue, maxposition)


  • 0
    deno  đã bình luận lúc 10, Tháng 1, 2024, 12:44

    include <stdio.h>

    #include <math.h>
    #include <string.h>
    
    
    int main(){
    
    int n;
    scanf("%d",&n);
    long long a[n];
    for(int i=0;i&lt;n;i++){
    scanf("%lld",&a[i]);
    }
    long long max=-99999;
    long long min=99999;
    int countM=0;
    int countm=0;
    for(int i=0;i&lt;n;i++){
    if(a[i]&lt;min){
        min=a[i];
        countm=i+1;
    }
    if(a[i]>max){
        max=a[i];
        countM=i+1;
    }
     }
     printf("%lld %d %lld %d",min,countm,max,countM);
     }
    

  • 0
    phanankhangntt2010  đã bình luận lúc 13, Tháng 12, 2023, 7:15

    include<bits/stdc++.h>

    using namespace std; int main() { int n; cin>>n; int vtl=0,vtn=0,max=-1e9,min=1e9; int a[n]; for(int i=1;i<=n;i++) { cin>>a[i]; if(a[i]>max) { max=a[i]; vtl=i; } if(a[i]<min) { min=a[i]; vtn=i; } } cout<<min<<" "<<vtn<<" "<<max<<" "<<vtl; }