How to check if an array is all increasing or decreasing and the gap between numbers is 1, 2 or 3 in C

2 Answers

0 votes
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
bool isArraySortedAndValidGap(int* arr, size_t size) {
    if (size < 2) return true; 
 
    // Check ascending order
    bool isAscending = true;
    for (size_t i = 1; i < size; ++i) {
        if (arr[i] < arr[i-1] || abs(arr[i] - arr[i-1]) < 1 || abs(arr[i] - arr[i-1]) > 3) {
            isAscending = false;
            break;
        }
    }
      
    // Check descending order
    bool isDescending = true;
    if (!isAscending) {
        for (size_t i = 1; i < size; ++i) {
            if (arr[i] > arr[i-1] || abs(arr[i] - arr[i-1]) < 1 || abs(arr[i] - arr[i-1]) > 3) {
                isDescending = false;
                break;
            }
        }
    }
      
    return isAscending || isDescending;
}
  
int main() {
    int arr1[] = {1, 2, 3, 5, 8, 11, 14, 15}; 
    size_t size1 = sizeof(arr1) / sizeof(arr1[0]);
      
    if (isArraySortedAndValidGap(arr1, size1)) {
        printf("array is sorted and valid gaps\n");
    } else {
        printf("array is not sorted or gaps are invalid\n");
    }
      
    int arr2[] = {15, 14, 11, 8, 5, 3, 2, 1}; 
    size_t size2 = sizeof(arr2) / sizeof(arr2[0]);
      
    if (isArraySortedAndValidGap(arr2, size2)) {
        printf("array is sorted and valid gaps\n");
    } else {
        printf("array is not sorted or gaps are invalid\n");
    }
     
    return 0;
}
 
    
     
/*
run:
      
array is sorted and valid gaps
array is sorted and valid gaps
    
*/

 



answered Jan 11, 2025 by avibootz
edited Jan 12, 2025 by avibootz
0 votes
#include <stdio.h>
#include <stdbool.h>

bool isArraySortedAndValidGap(int arr[], int size) {
    if (size < 2) return true; 

    bool increasing = arr[1] > arr[0];
    for (int i = 1; i < size; ++i) {
        int diff = arr[i] - arr[i - 1];
        if (diff != 1 && diff != 2 && diff != 3 && diff != -1 && diff != -2 && diff != -3) {
            return false;
        }
        if ((increasing && diff <= 0) || (!increasing && diff >= 0)) {
            return false;
        }
    }
    return true;
}

int main() {
    int arr1[] = {1, 2, 3, 5, 8, 11, 14, 15};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);

    if (isArraySortedAndValidGap(arr1, size1)) {
        printf("Array is sorted and has valid gaps\n");
    } else {
        printf("Array is not sorted or gaps are invalid\n");
    }

    int arr2[] = {15, 14, 11, 8, 5, 3, 2, 1};
    int size2 = sizeof(arr2) / sizeof(arr2[0]);

    if (isArraySortedAndValidGap(arr2, size2)) {
        printf("Array is sorted and has valid gaps\n");
    } else {
        printf("Array is not sorted or gaps are invalid\n");
    }

    return 0;
}

    
     
/*
run:
      
Array is sorted and has valid gaps
Array is sorted and has valid gaps
    
*/

 



answered Jan 12, 2025 by avibootz
...