题解 | #有序序列判断#
有序序列判断
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;
}
查看3道真题和解析