CTDL và giải thuật - kiểm tra xem dãy a có phải là dãy đơn điệu
Bài tập.
Nhập và một số nguyên dương n
, tiếp theo là n
số nguyên dương lần lượt là các phần tử của một dãy số a
. Hãy kiểm tra xem dãy a
có phải là dãy đơn điệu hay không, trả về "YES"
nếu có, "NO"
nếu không.
Một dãy đơn điệu khi nó là dãy số tăng (a[i] > a[i-1]
), hoặc dãy số giảm (a[i] < a[i-1]
).
Ví dụ:
- Test mẫu 1:
Input Output 5
1 2 3 4 5YES
Vớia = [1, 2, 3, 4, 5]
thì kết quả mong muốn là"YES"
.
- Test mẫu 2:
Input Output 4
5 3 1 -4YES
Vớia = [5, 3, 1, -4]
thì kết quả mong muốn là"YES"
.
- Test mẫu 3:
Input Output 5
1 2 4 3 -2NO
Vớia = [1, 2, 4, 3, -2]
thì kết quả mong muốn là"NO"
.
Hướng dẫn bài tập.
Để kiểm tra tính tăng giảm của dãy số, ta lần lượt kiểm tra hiệu số giữa hai phần tử kề nhau ở trong dãy.
Lưu ý: dãy có 1
phần tử cũng là dãy đơn điệu.
Code mẫu:
Ngôn ngữ C++:
Cách 1:
#include<iostream>
using namespace std;
int a[100001];
int main(){
int n;
cin >> n;
for (int i = 0; i < n; i++){
cin >> a[i];
}
bool kt1 = true; // kiểm tra dãy tăng.
bool kt2 = true; // kiểm tra dãy giảm.
for (int i = 1; i < n; i++){
if (a[i] <= a[i-1]) kt1 = false;
if (a[i] >= a[i-1]) kt2 = false;
}
if (kt1 || kt2) cout << "YES";
else cout << "NO";
return 0;
}
Cách 2:
#include<iostream>
using namespace std;
int a[100001];
int main(){
int n;
cin >> n;
for (int i = 0; i < n; i++){
cin >> a[i];
}
bool kt = true;
if (n > 2){
for (int i = 2; i < n; i++){
if ((a[i] - a[i-1]) * (a[i-1] - a[i-2]) <= 0){
kt = false;
}
}
}
if (kt) cout <<"YES";
else cout <<"NO";
return 0;
}