1 在做这道题1的时候,我看了很多解法,从中得出了最优解,与诸君共勉
2 我必须说明此处我也借鉴了其他作者,但他的解法有问题,我在此做了优化
#include <stdio.h>
int main() {
int n = 0;
int flag1 = 0; //升序
int flag2 = 0; //降序
int i = 0;
scanf("%d", &n);
int arr[50] = {0};
//当flag1和flag2同为1时表示序列中既有升序又有降序,所以并不有序。
for (i = 0; i < n && flag1 + flag2 <= 1; i++) {
scanf("%d", &arr[i]);
if (i > 0) { //从1开始
if (arr[i - 1] < arr[i]) {
flag1 = 1;
} else if (arr[i - 1] > arr[i]) {
flag2 = 1;
} else {
;
}
}
}
if (flag1&&flag2) { //此处优化
printf("unsorted\n");
} else {
printf("sorted\n");
}
return 0;
}
原作者的解决方案是 (n==i)但只在次数为三次时不可行,将条件改为(flag1&&flag),在存在不同顺序中便可解决