题解 法一 先用i按两个数字判断是递增还是递减,再判断是否有序 缺点是没法处理存在相等元素的情况
#include<stdio.h>
int main()
{
int arr[50] = { 0 };
int n;
scanf("%d", &n);
int i;
for (i = 0; i < n; i++)
{
scanf("%d", arr + i);
}
if (arr[0] < arr[1])
{
for (i = 0; i < n - 1; i++)
{
if (arr[i] == arr[i + 1])
continue;
if (arr[i] > arr[i + 1])
{
printf("unsorted\n");
break;
}
}
if (i == n - 1)
printf("sorted\n");
}
else
{
for (i = 0; i < n - 1; i++)
{
if (arr[i] == arr[i + 1])
continue;
if (arr[i] < arr[i + 1])
{
printf("unsorted\n");
break;
}
}
if (i == n - 1)
printf("sorted\n");
}
return 0;
}
法二 利用两个标记变量,不是有序,则必然同时出现>和<
#include <stdio.h>
int main()
{
int n = 0;
int arr[50] = {0};
scanf("%d", &n);
int i = 0;
int flag1 = 0;
int flag2 = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
if(i>0)
{
if(arr[i]>arr[i-1])
flag1 = 1;
else if(arr[i]<arr[i-1])
flag2 = 1;
}
}
if(flag1+flag2 > 1)
printf("unsorted\n");
else
printf("sorted\n");
return 0;
}
|