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");
    
}

By alaza7

Leave a Reply

Your email address will not be published. Required fields are marked *