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
c++
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; }
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;
}
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
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]]
Ý 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() {
} main() {
}
Ai thấy hay cho mik xin 1 upvote nhé
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
In ra kết quả
print(minvalue, minposition, maxvalue, maxposition)
include <stdio.h>
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; }