首页 > 试题广场 >

有序序列判断

[编程题]有序序列判断
  • 热度指数:50493 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。

数据范围: 序列中的值都满足

输入描述:
第一行输入一个整数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
#include<stdio.h>
//只要都是升序还是降序,那么相邻的两个数做差的次数一定是n-1,所以只要判别他们最后做差的次数是否和执行升序或降序的分别的总次数相等,如果相等则为sort 不等为 unsort
int  main()
{
    int n=0;
        scanf("%d\n",&n);
    int a[50]={0};
    int count=0;
    int count1=0;
    for(int i=0;i<50;i++)
    {
        scanf("%d",&a[i]);
    }
   for(int i=0;i<n-1;i++)
   {
       if(a[i]-a[i+1]>=0)
       {
           count++;
           if(count-i!=1)
     
               break;
   
       }
       else if(a[i]-a[i+1]<0)
       {   
           count1++;
       if(count1-i!=1)
 
               break;
       }
   }
    if (count1==n-1||count==n-1)
        printf("sorted\n");
    else
        printf("unsorted");
    
    
}
发表于 2021-09-12 20:14:35 回复(0)
#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;
            }
         
        }
        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;
            }
                
        }
        
        if(flag_ni == 0)
            break;
        
    }
    if(flag_sheng ==1 || flag_ni == 1 )
        cout<<"sorted"<<endl;
    else
        cout<<"unsorted"<<endl;

    
}




注意:break只能跳出一层循环
发表于 2020-10-01 11:17:25 回复(1)
import java.util.*;

public class Main {
    public static void main(String[] args) {
    	//输入
        Scanner sc = new Scanner(System.in);
        String N = sc.nextLine();
        String[] str = sc.nextLine().split(" ");
        //创建
        int[] n = new int[str.length];
        //放进数组
        for(int i=0;i<str.length;i++){
            n[i] = Integer.parseInt(str[i]);}
        //比较排序后的字符串和原来字符串是否一致,聪明!这方法也太棒了!
        //复制的数组
        int[] n1 = Arrays.copyOf(n, n.length);
        int[] n2 = Arrays.copyOf(n, n.length);
        Arrays.sort(n1);
        //再搞一个逆序的
        for(int start=0,end=n2.length-1;start<end;start++,end--){
            int temp=n2[start];
            n2[start]=n2[end];
            n2[end]=temp;}
        if(Arrays.equals(n, n1)) System.out.println("sorted");
        else if(Arrays.equals(n2,n1)) System.out.println("sorted");
        else System.out.println("unsorted");
        //逆序也算,这可咋办?我知道咋办了,我给他逆序再搞一个数组,成功~
    }
}

发表于 2020-09-23 21:52:58 回复(0)
#include<iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int a[n];
    bool flag=true;
    for(int i=0;i<n;i++)
        cin>>a[i];
    if(a[0]<a[1])//升序
        {
            for(int i=1;i<n-1;i++)
            {
                if(a[i+1]<a[i])
                {
                    flag=false;
                    break;
                }
            }
        }
     else//降序
        {
            for(int i=1;i<n-1;i++)
            {
                if(a[i+1]>a[i])
                {
                    flag=false;
                    break;
                }
            }
        }
    if(flag)
        cout<<"sorted"<<endl;
    else
        cout<<"unsorted"<<endl;
    return 0;
}



发表于 2020-07-24 17:38:03 回复(0)
两个标志位,一个记录上升,一个记录下降,最后判断,如果同时存在上升和下降说明没有排序
#include <stdio.h>
int main()
{
    int a[55],n,flag1=0,flag2=0,i;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
        if(i>0){
            if(a[i]<a[i-1]){
                flag1=1;
            }else if(a[i]>a[i-1]){
                flag2=1;
            }
        }
    }
    if(flag1&&flag2) printf("unsorted\n");
    else printf("sorted\n");
}

发表于 2020-04-10 17:57:11 回复(4)
N = int(input())
ln = list(map(int, input().split()))
print("sorted" if ln == sorted(ln) or ln == sorted(ln, reverse=True) else "unsorted")
发表于 2021-08-25 14:42:40 回复(0)
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int pre = sc.nextInt();
            int flag = 0;
            boolean judge = true;
            for (int i = 1; i < n; i++) {
                int cur = sc.nextInt();
                if (cur - pre >= 0 && flag>=0){
                    flag = 1;
                }else if(cur - pre <= 0 && flag<=0){
                    flag = -1;
                }else{
                    judge = false;
                }
                pre = cur;
            }
            if (judge){
                System.out.println("sorted");
            }else {
                System.out.println("unsorted");
            }
        }
    }
}


发表于 2020-09-26 14:00:41 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int a = in.nextInt();
            int flag = 1;
            int n = in.nextInt();
            for (int i  = 0; i < a-1; i++) {
                int temp = in.nextInt();
                if(temp>n){
                    flag++;
                } else {
                    flag--;
                }
                n = temp;
            }
            System.out.print(flag==a || flag==-a+2?"sorted":"unsorted");
        }
    }
}
发表于 2024-05-20 20:12:06 回复(0)
#include <stdio.h>

int main() {
    int a[100] = {0};
    int count=0,n;
    scanf("%d",&n);

    for(int i=0;i<n;i++)  //输入数值
    {
        scanf("%d",&a[i]);
    }



    if(a[0] > a[1])
    {
        for(int i = 0;i<n-1;i++)
        {
            if(a[i] < a[i+1])
            { 
                count++;
                break;
            }
        }
    }

    if(a[0] < a[1])
    {
        for(int i = 0;i<n-1;i++)
        {
            if(a[i] > a[i+1])
            {
                count++;
                break;
            }
        }
    }


    if(count != 0)
        printf("unsorted\n");
    else
        printf("sorted\n");


    return 0;
}


编辑于 2024-04-21 13:33:39 回复(0)
#include <stdio.h>
//1 6 9 22 30 判断所有元素升序或降序
int main() {
    int N = 0;
    int arr[50] = {0};
    scanf("%d", &N);
    int flag1 = 0;//升序
    int flag2 = 0;//降序
    for (int i = 0; i < N; i++) {
        scanf("%d", &arr[i]);
        if (i > 0) {
            if (arr[i] > arr[i - 1]) {
                flag1 = 1;
            } else {
                {
                    flag2 = 1;
                }
            }
        }
    }
    if (flag1 + flag2 == 1) {
        printf("sorted\n");
    } else {
        printf("unsorted\n");
    }
    return 0;
}

发表于 2024-01-22 23:13:38 回复(0)
#include <stdio.h>
//吃掉吃掉!
int main() {
    int a[60], b=0,cnt=0;
    getchar();
    getchar();//因为输入在两位数以内,要用两个getchar()或者一个scanf也行,就能把第一行吃掉啦
    while (scanf("%d", &a[b++]) != EOF);
    for(int i=0;i<b-1;i++){
        for(int j=i;j<b-1;j++){
            if(a[i]>a[j])cnt++;//cnt计算当前序列的值比之后序列的值大的次数
        }
    }
    int g=0;
    for(int i=1;i<=b-2;i++)g+=i;//别问为什么g这么突兀,问就是第一次没搞g没完全成功临时加的
    if(cnt==0||cnt==g)printf("sorted");
    else printf("unsorted");
    return 0;
}//后来想了一下,是因为没有写a[i]与a[j]交换的代码导致cnt数量大大增加

编辑于 2024-01-13 16:33:51 回复(0)
#include <stdio.h>
int main(){
    int n, isAscending = 1, isDescending = 1;
    int arr[50] = {0};
    scanf("%d",&n);
    for(int i = 0; i < n; i++){
        scanf("%d",&arr[i]);
    }
    //判断是否升序
    for(int i = 0; i < n - 1; i++){
        if(arr[i] < arr[i+1]){
            isAscending = 0;
            break;
        }
    }
    //判断是否降序
    for(int i = 0; i < n - 1; i++){
        if(arr[i] > arr[i+1]){
            isDescending = 0;
            break;
        }
    }
    //升序和降序中只要有一个符合就有序
    if(isAscending || isDescending){
        printf("sorted");
    } else {
        printf("unsorted");
    }
    return 0;
}

发表于 2022-08-19 09:11:16 回复(0)
#include<stdio.h>
int main()
{
    int N , a[50] , flag1 , flag2;    //flag1表示第1次检测是否满足条件
    scanf("%d",&N);
    for(int i = 0 ; i < N ; i++) scanf("%d",&a[i]);
    
        for(int i = 0 ; i < N - 1 ; i++)
        {
            if(a[i] >= a[i + 1]) flag1 = 1;    //从大到小排列
            else
            {
                flag1 = 0;
                break;
            }  
        }
        for(int j = 0 ; j < N - 1 ; j++)
        {
            if(a[j] <= a[j + 1]) flag2 = 1;    //从小到大排列
            else
            {
                flag2 = 0;
                break;
            }
        }
    if(flag1 == 1 || flag2 == 1) printf("sorted");
    else printf("unsorted");
    return 0;
}

发表于 2022-06-26 00:16:01 回复(0)
#include <iostream>
using namespace std;
int a[60];
int main()
{
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i ++ ) cin >> a[i];
    int flag = a[1] - a[0];
    for (int i = 2; i < n; i ++ )
    {
        int t = a[i] - a[i - 1];
        if (t * flag < 0) 
        {
            cout << "unsorted" << endl;
            break;
        }
        flag = t; 
        if (i == n - 1) cout << "sorted" << endl;
    }
}

发表于 2022-02-26 14:36:45 回复(0)
#include<stdio.h>
int main() {
int n, arr[100];
scanf("%d", &n);
int i;
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int IsAsc=1;
int IsDesc = 1;
for (i = 0; i < n - 1; i++) {
if (arr[i] > arr[i + 1]) {
IsAsc = 0;
}
if (arr[i] < arr[i + 1]) {
IsDesc = 0;
}
}
if (IsAsc || IsDesc) { //IsAsc和IsDesc值为1时,才是真.0为假
printf("sorted");
} else {
printf("unsorted");
}

return 0;
}

发表于 2024-10-20 12:51:35 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

//判断是否有序
bool IsOrder(int *a, int size)
{
    //降序  1 1 1 1 1 也认为降序
    if(a[0] >= a[1])
    {
        //也要降序
        //i为size-1是因为当i = size-1时,i+1不越界
        for(int i = 0; i < size - 1; i++)
        {
            if(a[i] < a[i + 1])
                return false;
        }
    }
    else 
    {
        //升序
        for(int i = 0; i < size -1; i++)
        {
            if(a[i] > a[i + 1])
                return false;
        }
    }
    return true;   
}

int main() 
{
    int n = 0;
    scanf("%d", &n);
    int* a = (int*)malloc(sizeof(int) * n);
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    //判断是否有序
    if(IsOrder(a, n))
        printf("sorted");
    else
        printf("unsorted");
    
    return 0;
}

发表于 2024-06-23 03:05:30 回复(0)
#include <stdio.h>

int main()
{
	int arr[50] = { 0 };
	int sz = 0;
	int i = 0;
	int flag_1 = 0;//降序
	int flag_2 = 0;//升序

	//输入
	scanf("%d", &sz);
	for (i = 0; i < sz; i++)
	{
		scanf("%d", &arr[i]);

		//判断
		if (i > 0)
		{
			if (arr[i] < arr[i - 1])//降序
			{
				flag_1 = 1;
			}
			else if (arr[i] > arr[i - 1])//升序
			{
				flag_2 = 1;
			}
			//2个数字相同,则不处理,直接进入下一轮
		}
	}


	//输出
	if (flag_1 + flag_2 <= 1)
	{
		printf("sorted\n");
	}
	else
	{
		printf("unsorted\n");
	}

	return 0;
}

编辑于 2024-02-04 02:49:09 回复(0)
#include<iostream>
using namespace std;
int main() {
    int flag = 1;//假设有序。
    int n, i, j, k;
    cin >> n;
    int arr [n];
    for (i = 0; i < n; i++) {
        cin >> arr[i];
    }
    if (arr[0] >= arr[1]) {
        for (j = 1; j < n - 1; j++) {
            if (arr[j] < arr[j + 1]) {
                flag = 0;
                break;
            }
        }
    }
    if (arr[0] < arr[1]) {
        for (k = 1; k < n - 1; k++) {
            if (arr[k] > arr[k + 1]) {
                flag = 0;
                break;
            }
        }
    }
    if(flag==0)
        cout<<"unsorted";
    else
        cout<<"sorted";
    return 0;
}

发表于 2023-10-07 19:41:55 回复(0)
#include <stdio.h>

    int n = 0 ;

int determine(int* arr,int n)
{
    int k = n;
    int i = 0 ;
    if(arr[0] > arr[1])
    {
        for(i = 1 ; i < n-1 ; i++)
        {
            if(arr[i] < arr[i+1])
            return 0;
        }
    }

    if(arr[0] < arr[1])
    {
        for(i = 1 ; i < n-1 ; i++)
        {
            if(arr[i] > arr[i+1])
            return 0;
        }
    }

    if(arr[0] == arr[1])
    {
        if(k == 1)
        return 1;
        k--;
      return determine(arr+1,k);
    }

    return 1;
}

int main() {
    scanf("%d",&n);

    int arr[n];
    int  i =0 ;
    for(i = 0 ; i < n ; i++)
    scanf("%d",&arr[i]);

    int ret = determine(arr,n);
   
    if(ret == 1)
    printf("sorted\n");
    else
    printf("unsorted\n");

    return 0;
}
发表于 2023-07-03 09:51:31 回复(0)
#include <stdio.h>

int main()
{
    int arr[50];
    int i;
    int n;
    int flag=1;

//初始化数组
    scanf("%d",&n);
    getchar();
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }

//判断是否有序
    for(i=0;i<n-2;i++)
    {
      if((arr[i] <= arr[i+1] && arr[i+1] <= arr[i+2]) ||
         (arr[i] >= arr[i+1] && arr[i+1] >= arr[i+2]))
      {
        flag=1;
      }
      else
      {
        flag=0;
        break;
      }
    }

//输出
    if(flag==0)
    {
        printf("unsorted\n");
    }  
    else
    {
        printf("sorted\n");
    }
    return 0;
}
发表于 2023-05-13 17:13:24 回复(0)