官方给出的答案存在问题:我们自测输入
3
3 3 4
输出结果为:unsorted
代码出现的问题在:
for(int j=2;j<n;++j) { if(a[1]>a[0])//判断开头是升还是降,进入if表示是升序 { if(a[j]<a[j-1])//如果有不符合的 { cout<<"unsorted";//则不是有序的 break; } else if(j==n-1)//一直到最后都是符合的 cout<<"sorted";//则整个数组都是升序,输出有序 } else//如果开头是降序 { if(a[j]>a[j-1])//有相邻元素不满足降序排列 { cout<<"unsorted";//则不是有序的 break; } else if(j==n-1 )//一直到最后,整个数组都是降序的 cout<<"sorted";//输出有序 }
我们看 输入数组为时3 3 4。
首先会进行判断a[1]>a[0]不成立,进入else中进行循环判断,a[j]>a[j-1]即4 >3,显然成立,输出unsorted,但实际上3 3 4是有序数组,所以出现问题。
#include<stdio.h> int main() { int arr_val[50]; int N; int flag = 0; int start = 0; scanf("%d", &N); if (N < 3 || N > 50) { return 0; } for (int i = 0; i <= N - 1; i++) { scanf("%d", &arr_val[i]); } if (arr_val[0] <= arr_val[1]) { //升序 for (int i = 0; i <= N - 2; i++) { if (arr_val[i] <= arr_val[i + 1]) { flag = 1; } else { flag = 0; break; } } } if (arr_val[0] >= arr_val[1] && flag == 0) { //逆序 for (int i = 0; i <= N - 2; i++) { if (arr_val[i] >= arr_val[i + 1]) { flag = 1; } else { flag = 0; break; } } } if (flag == 0) { printf("unsorted"); } else if (flag == 1) { printf("sorted"); } return 0; }