Cho một mảng các nguyên có n phần tử, yêu cầu kiểm tra dãy số tăng dần hay giảm dần? Như vậy, ta có 3 trường hơp:
- Dãy số tăng dần, phần tử phía sau không nhỏ hơn các phần tử phía trước
- Dãy số giảm dần, phần tử phía sau không lớn hơn các phần tử phía trước
- Dãy số không tăng không giảm
Ý tưởng kiểm tra tăng dần: Nếu dãy có n số, bạn phải đếm có bao nhiêu cặp 2 số liên tiếp a[i] & a[i+1], (0 <= i < n-2) thỏa mãn a[i] <= a[i+1]. Nếu bạn đếm được n – 1 cặp, tức là mảng tăng thì trả về 1. Ngược lại thì trả về 0.
Chương trình kiểm tra mảng tăng dần dần C/C++
#include <stdio.h> int IsASC(int a[], int n) { int dem = 0; for (int i = 0; i < n - 1; i++) { if (a[i + 1] >= a[i]) dem++; } if (dem == n - 1) return 1; else return 0; } int main() { int a[] = {1, 3, 5, 7, 7}; int n=5; if (IsASC(a,n)) printf("%s", "Mang tang dan"); else printf("%s", "Mang khong tang dan"); }
Chương trình kiểm tra mảng giảm dần dần C/C++
#include <stdio.h> int IsDESC(int a[], int n) { int dem = 0; for (int i = 0; i < n - 1; i++) { if (a[i + 1] <= a[i]) dem++; } if (dem == n - 1) return 1; else return 0; } int main() { int a[] = {8,5, 3, 2, 0}; int n=5; if (IsDESC(a,n)) printf("%s", "Mang giam dan"); else printf("%s", "Mang khong giam dan"); }