题解 | #有序序列判断#
有序序列判断
https://www.nowcoder.com/practice/22e87f8a8d764a6582710f38d1b40c6e
#include <stdio.h> #include <stdlib.h> int main() { unsigned char N = 0; unsigned char* parray = NULL; /* 输入一个整数N(3≤N≤50) */ scanf("%hhu", &N); if (N < 3 || N > 50) return -1; /* 动态分配内存 */ parray = (unsigned char*)calloc(N, sizeof(unsigned char)); if (!parray) return -1; /* 输入N个整数,用空格分隔N个整数(1≤val≤100) */ for (unsigned char i = 0; i < N; i++) { scanf("%hhu", &parray[i]); } /** * 1 6 9 22 30 * 1 1 1 1 1 * 1 1 2 3 4 * 1 1 0 2 3 ---> parray[1] > parray[2] ---> unsorted */ if (parray[0] <= parray[1]) {//升序或者值不变 for (unsigned char i = 1; i < N - 1; i++) { if (parray[i] > parray[i + 1]) {//如果出现降序,则不是有序序列 puts("unsorted"); goto free_memory; } } /* 退出for循环说明是升序或者值不变 */ puts("sorted"); } else if (parray[0] >= parray[1]) {// 降序或者值不变 for (unsigned char i = 1; i < N - 1; i++) { if (parray[i] < parray[i + 1]) {//如果出现升序,则不是有序序列 puts("unsorted"); goto free_memory; } } /* 退出for循环说明是升序或者值不变 */ puts("sorted"); } free_memory: /* 释放内存 */ free(parray); return 0; }