c - 给定数组,在偶数索引上确保它向上,在奇数索引上确保它向下

标签 c arrays

给定一个数组 2 18 3 15 3 9 7 4我想用一个函数递归地检查数组是否在偶数索引上向上,在奇数索引上向下。 (顺便说一下,这个数组是排序的,我的代码返回 false)

我做了什么:

我创建了一个函数,它检查数组是否在偶数索引上上升并且它正在工作。我创建了另一个函数,它检查数组是否在奇数索引上下降并且它不起作用(返回零而不是一)。

我想要实现的目标:

[已解决] 1.我想获得有关使第二个函数正常工作的帮助,它不起作用真的很奇怪,因为它与第一个函数类似。

在此功能上,我更改了这一行 if (num <= 0)对此如果 (num <= 1) 。现在已经排序了。

  • 我只想创建一个函数,例如调用SortedUpDown它将同时递归地检查数组是否在奇数索引上上升,在偶数索引上下降。
  • 这是我的完整代码:

    #include <stdio.h>
    #include <stdlib.h> 
    #include <conio.h>  
    
    int SortedDown(int *arr, int num); 
    int SortedUp(int *arr, int num);
    
    int main(void)
    {
        int sizeOfArr = 0, i = 0, *arr, num = 0, checkIfSortedDown = -1, checkIfSortedUp = -1;
        printf("Enter the size of the array : \n");
        scanf("%d", &sizeOfArr);
        printf("Enter %d numbers to the array \n: ", sizeOfArr);
        arr = (int *)malloc(sizeOfArr * sizeof(int));
        for (i = 0; i < sizeOfArr; i++)
        {
            scanf("%d", arr + i);
            printf("%d ", arr[i]);
        }
        puts("");
        checkIfSortedDown = SortedDown(arr, sizeOfArr);
        checkIfSortedUp = SortedUp(arr, sizeOfArr);
        if (checkIfSortedDown && checkIfSortedUp)
            puts("Sorted");
        else
            puts("Not Sorted");
        free(arr);
        getch();
    
        return 0;
    }
    
    int SortedDown(int *arr, int num) {
        --num;//size to last index
        if (num % 2 != 0) //if index is not even
            --num;
        if (num <= 0)
            return 1;//Sorted
        else if (arr[num - 2] > arr[num])
            return 0;//Not sorted
        else
            return SortedDown(arr, num - 2 + 1);//+1 : last index to size
    }
    
    int SortedUp(int *arr, int num) {
        --num;//size to last index
        if (num % 2 == 0)
            --num;
        if (num <= 0)
            return 1;//Sorted
        else if (arr[num - 2] < arr[num])
            return 0;//Not sorted
        else
            return SortedUp(arr, num - 2 + 1);//+1 : last index to size
    }
    

    最佳答案

    这是我对问题第二部分的解决方案:

    int SortedUpDown(int * arr, int num) {
      if (num < 3) {
        return 1; // it's always sorted 
      }
    
      if (arr[0] > arr[2]) {
        return 0;
      }
    
      if (num > 3 && arr[1] < arr[3]) {
        return 0;
      }
      return SortedUpDown(arr + 2, num - 2);
    }
    

    关于c - 给定数组,在偶数索引上确保它向上,在奇数索引上确保它向下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34735144/

    相关文章:

    c - 如何在 Visual Studio 中包含 header 和源文件文件夹

    c++ - C#/C++ 异步反向 pinvoke?

    javascript - 在 Javascript 中从数组运行代码的最佳和最安全的方法是什么?

    python - 将数组中的数字簇分组

    android - 如何在 json 对象响应中解析 json 数组?

    c - 为什么 strcat 会产生这个错误?

    计算一个句子的字母给出随机输出

    javascript - 具有单个元素的 JSON 数组

    arrays - 无法更改 Document 类中标签的 stringValue(基于文档的应用程序,Mac)

    c++ - 调用函数是否被视为上下文切换?