官方给出的答案存在问题:我们自测输入
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;
}



京公网安备 11010502036488号