题目描述
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序。
-
输入描述:
第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数,用空格分隔N个整数。 -
输出描述:
输出为一行,如果序列有序输出sorted,否则输出unsorted。 -
我的解答
注意题干的要求是判断是否有序,包括 升序、降序(注意 1,1,1,1 也是有序的)
基本思路就是 需要设置两个标记,分别用来判断 升序、降序
我采用上下两个嵌套循环,上面嵌套循环 比较相邻的 元素 判断 是否升序,下面同理判断是否降序
需要注意的点:
- 两层嵌套循环,内层使用
break
,只能跳出内层循环(之前一直不清楚),本题需要 外部也设break
- 比较相邻元素的时候,一定要包含
==
的情况
- C++代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int len,arr_num,flag_sheng = 0,flag_ni = 0;
cin>>len;
int arr[len];
for(int i = 0;i<len;i++){
cin>>arr_num;
arr[i] = arr_num;
}
//判断升序
for(int i = 0;i<len;i++){
for(int j = i+1;j<len;j++){
if(arr[i] <= arr[j])
flag_sheng = 1;
else{
flag_sheng = 0;
break;
}
}
//跳出外层循环,否则易出现后面的正确顺序,而flag 又重新赋值为 1
if(flag_sheng == 0)
break;
}
//判断降序
for(int i = 0;i<len;i++){
for(int j = i+1;j<len;j++){
if(arr[i] >= arr[j])
flag_ni = 1;
else{
flag_ni = 0;
break;
}
}
//跳出外层循环,否则易出现后面的正确顺序,而flag 又重新赋值为 1
if(flag_ni == 0)
break;
}
if(flag_sheng ==1 || flag_ni == 1 )
cout<<"sorted"<<endl;
else
cout<<"unsorted"<<endl;
}
- Java实现代码
Java就是利用 另一个排序后的数组(需要引入新数组) 和 输入的数组 遍历比较
import java.util.Scanner;
import java.lang.*;
import java.util.Arrays;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
int flag_sheng = 1,flag_ni = 1;
//输入的数组,和新的放排序后元素的数组
int [] arr = new int[len];
int [] arr_sort = new int[len];
for(int i = 0;i<len;i++){
arr[i] = sc.nextInt();
arr_sort[i] = arr[i];
}
//对输入的数排序
Arrays.sort(arr_sort);
//循环对比
for(int i = 0;i<len;i++){
if(arr_sort[i] != arr[i])
flag_sheng = 0;
if(arr_sort[len -1 - i] != arr[i])
flag_ni = 0;
}
if(flag_ni == 1 || flag_sheng == 1)
System.out.println("sorted");
else
System.out.println("unsorted");
}
}