牛客网例题:点我做题
【❤️温馨提示】先做题,再看讲解效果更佳哟
描述
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序
或者从大到小排序(相同元素也视为有序)。
输入描述:
第一行输入一个整数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
思路
第一步:首先输入整数n,并创建一个数组来存储n个整数。
第二步:遍历数组并判断数组内部的大小
第三步:如果序列有序输出sorted,否则输出unsorted。
更详细的还在下面,跟着我一步一步来
第一步:首先输入整数n,并创建一个数组来存储n个整数。
#include<stdio.h>
int main()
{
int n = 0;
//输入n
scanf("%d", &n);
//创建一个数组来存储
int a[n];
//输入数组a
for (int i = 0;i < n;i++)
scanf("%d", &a[i]);
return 0;
}
第二步:遍历数组并判断数组内部的大小
那么问题来了,如何判断一个数组是升序还是降序,又或者是数组内部都是相同元素呢?
我们可以定义flag1=0表示升序,则flag2=0为降序,如果数组是升序就把flag1标记成1,若为降序就把flag标记成1
#include<stdio.h>
int main()
{
int n = 0;
//输入n
scanf("%d", &n);
//创建一个数组来存储
int a[n];
//输入数组a
for (int i = 0;i < n;i++)
scanf("%d", &a[i]);
int flag1 = 0; //表示升序
int flag2 = 0; //表示降序
for (int i = 1;i < n;i++)
{
//降序
if (a[i - 1] > a[i])
flag2 = 1;
//升序
else if (a[i - 1] < a[i])
flag1 = 1;
}
}
第三步:判断flag1和flag2
升序:flag1 + flag2 = 1
降序:flag1 + flag2 = 1
元素相同:flag1 + flag2 = 0
有升有降:flag1 + flag2 = 2
#include<stdio.h>
int main()
{
int n = 0;
//输入n
scanf("%d", &n);
//创建一个数组来存储
int a[n];
//输入数组a
for (int i = 0;i < n;i++)
scanf("%d", &a[i]);
int flag1 = 0; //表示升序
int flag2 = 0; //表示降序
for (int i = 1;i < n;i++)
{
//降序
if (a[i - 1] > a[i])
flag2 = 1;
//升序
else if (a[i - 1] < a[i])
flag1 = 1;
}
if (flag1 + flag2 >= 2)
printf("unsorted");
else
printf("sorted");
return 0;
}
最后这道题就AC啦
2023年1月15日