题目链接:
解题思路:
1. 首先要明白有序的概念是什么,有序即指一行数字从小到大排列,
或者是从大到小排列,
或是这一行数字均相等
所以,有序一共有上述三种情况
2. 因为题目要求是判断输入的一行数字是否是有序的,
所以根据有序的三种情况,我们可以想到用 if 语句来作为整体的大框架
3. 然后将思路集中到每一种情况上来,其中关键的一点是要先根据一行数字中俩个数字的有序情况作为初步的估计,这里我选定第一个数字,与最后一个数字(实际上,任选俩个也都可以)
因为如果这个序列是有序的,则任意按顺序取出俩个数字则是符合这种有序情况的
4. 一种常见的错误思路是:
设置一个中间变量,如果在遍历的过程中找到不是有序的数字时,这个变量的值就会为 0,如果是有序时,则这个变量的值为 1
这样做实际上是忽略了这个中间变量的值在找到不符合数字时到整行数字遍历完成之前,它的值还会被覆盖,所以这个思路并不符合程序员给出的所有数列,只有特定的数列才会满足这个错误的思路
错误代码(正确代码在文末):
#include <stdio.h>
int main ()
{
int data = 0;
scanf("%d\n",&data);
int arr[50] = {0};
int i = 0;
for (i = 0;i < data;i++)
{
scanf("%d ",&arr[i]); //输入
}
if(arr[data-1] - arr[0] > 0) //判断是否为升序
{
int m = 0;
int change = 0;
for (m = 0;m < data-1;m++)
{
if (arr[m+1] - arr[m] > 0)
{
change = 1;
}
else
change = 0;
}
if (change == 1)
printf("sorted\n");
else
printf("unsorted");
}
else if (arr[data-1] - arr[0] < 0)//判断是否为降序
{
int n = 0;
int change2 = 0;
for (n = 0;n < data-1;n++)
{
if (arr[n+1] - arr[n] < 0)
{
change2 = 1;
}
else
change2 = 0;
}
if (change2 == 1)
printf("sorted\n");
else
printf("unsorted");
}
else if (arr[data - 1] == arr[0]) //判断是否相等
{
int x = 0;
int change3 = 0;
for (x = 0;x < data-1;x++)
{
if (arr[x+1] == arr[x] )
{
change3 = 1;
}
else
change3 = 0;
}
if (change3 == 1)
printf("sorted\n");
else
printf("unsorted");
}
return 0;
}
正确代码:
#include <stdio.h>
int main ()
{
int data = 0;
scanf("%d\n",&data);
int arr[50] = {0};
int i = 0;
for (i = 0;i < data;i++)
{
scanf("%d ",&arr[i]); //输入
}
if(arr[data-1] - arr[0] > 0) //判断是否为升序
{
int m = 0;
int change = 0;
for (m = 0;m < data-1;m++)
{
if (arr[m+1] - arr[m] < 0)
{
printf("unsorted");
return 0;
}
else
change = 1;
}
if (change == 1)
printf("sorted");
}
else if (arr[data-1] - arr[0] < 0)//判断是否为降序
{
int n = 0;
int change2 = 0;
for (n = 0;n < data-1;n++)
{
if (arr[n+1] - arr[n] > 0) //
{
printf("unsorted"); 新
return 0 ; 的
思
路
}
else
change2 = 1;
}
if (change2 == 1)
printf("sorted\n"); //
}
else if (arr[data - 1] == arr[0]) //判断是否相等
{
int x = 0;
int change3 = 0;
for (x = 0;x < data-1;x++)
{
if (arr[x+1] != arr[x] )
{
printf("unsorted");
return 0;
}
else
change3 = 1;
}
if (change3 == 1)
printf("sorted\n");
}
return 0;
}