Nicn的刷题日常之 有序序列判断
目录
1.题目描述
描述
输入描述:
输出描述:
示例1
示例2
示例3
2.解题
1.题目描述
描述
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。
数据范围: 3≤�≤50 3≤n≤50 序列中的值都满足 1≤���≤100 1≤val≤100
输入描述:
第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数,用空格分隔N个整数。
输出描述:
输出为一行,如果序列有序输出sorted,否则输出unsorted。
示例1
输入:
5 1 6 9 22 30复制输出:
sorted复制
示例2
输入:
5 3 4 7 2 10复制输出:
unsorted复制
示例3
输入:
5 1 1 1 1 1复制输出:
sorted
2.解题
解法1:
#include <stdio.h>
int main()
{
int n = 0;
int arr[20000] = { 0 };
scanf("%d", &n);
int cont = 0;
int cout = 0;
int j = 0;
for (j = 0; j < n; j++)
{
scanf("%d", &arr[j]);
}
int i = 0;
for (i = 0; i < n-1; i++)
{
if (arr[i] <= arr[i + 1])
{
cont++;//判断是不是升序
}
else if (arr[i] >= arr[i + 1])
{
cout++;//判断降序
}
}
if (cout == n-1|| cont == n-1)
{
printf("sorted\n");
}
else
{
printf("unsorted\n");
}
return 0;
}
解法2:
#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;
}
}
//flag1 和 flag2 都为1是乱序的
if(flag1+flag2 > 1)
printf("unsorted\n");
else
printf("sorted\n");
return 0;
}