牛客网——有序序列判断

简介: 牛客网——有序序列判断

前言


我新学了一个判断数组是否有序的细节和方法,和大家分享一下。

一、有序序列判断


题目来源:

有序序列判断_牛客题霸_牛客网

描述


输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。

数据范围: 3 \le n \le 50 \3≤n≤50  序列中的值都满足 1 \le val \le 100 \1≤val≤100

输入描述:


第一行输入一个整数N(3≤N≤50)。

第二行输入N个整数,用空格分隔N个整数。

输出描述:


输出为一行,如果序列有序输出sorted,否则输出unsorted。

二、分析问题


大致分析:


很显然第一行输入一个整数,告诉我们接下来有多少个数,那我们就可以定义数组的长度了,运用数组的排序交换就可以得到是否有顺序‘

问题核心:

怎么探寻,一个数组里面的数是否有顺序。

三、代码如下


1、错误示范: 思路都是错误的,只是说明一下我刚开始的错误思路。

#include<stdio.h>
int main(){
    int n,a,m=0,w=0;
    scanf("%d\n",&n);
    int arr[50];                 //根据题目设置50长度,有多无少
    for(int i=0;i<n;i++){
        scanf("%d ",&arr[i]); //输入全部,我以为有个循环就,a[0]输入一个然后自己跳到a[1]我再输            
                                 入一个数。结果不是。
        if(arr[i]<=arr[i-1]){ 
            m=1;                //下面比对,如果是前面小于后面(升序),就m=1
        }
        else if(arr[i]>arr[i-1]){
            w=1;                //这个是降序,w=1
        }    }
        if(m==1&&w==1){        //两个同时成立就什么有升有降就不行了是unsorted.
            printf("unsorted");
        }
    else{
        printf("sorted");
    }
    return 0;
}

2、正确思路

#include<stdio.h>
int main(){
    int n,a,m=0,w=0;
    scanf("%d\n",&n);
    int arr[50];
    for(int i=0;i<n;i++){
        scanf("%d ",&arr[i]);  //关键点:与之前不同,它是先输入一个数就往下走一次
        if(i>0){                
        if(arr[i]<arr[i-1]){        //第一次输入的时候,i=0,i-1还没出生,所以i>0才开始判断
            m=1;
        }
        else if(arr[i]>arr[i-1]){
            w=1;
        }  
        }
    }
        if(m==1&&w==1){            //下面同理
            printf("unsorted");
        }
    else{
        printf("sorted");
    }
    return 0;
}

总结


以上就是今天要讲的内容,本文仅仅简单介绍了判断数组是否有序的方法,最主要在于能不能理解它是输入一次往下走一次(这是我的理解,我也是个初学者,要是不对请一定要给指正,笔者不胜感激),然后分别用正序和倒序一起判断整体。

相关文章
|
7月前
|
存储 C语言
牛客网刷题总结(1.有序序列判断,2.获得月份天数,3.矩阵相等判定,4.矩阵转换,5.井字棋判断输赢,6.递归进行进制转化)
牛客网刷题总结(1.有序序列判断,2.获得月份天数,3.矩阵相等判定,4.矩阵转换,5.井字棋判断输赢,6.递归进行进制转化)
78 0
算法练习Day55|● 392.判断子序列 ● 115.不同的子序列
算法练习Day55|● 392.判断子序列 ● 115.不同的子序列
|
3月前
|
C语言 Python
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
308 4
|
7月前
|
C语言
c语言编程练习题:7-51 求奇数分之一序列前N项和
c语言编程练习题:7-51 求奇数分之一序列前N项和
77 0
|
6月前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
|
7月前
【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)
【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)
|
7月前
58.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
58.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
39 0
|
算法 C++
剑指offer(C++)-JZ3:数组中重复的数字(算法-排序)
剑指offer(C++)-JZ3:数组中重复的数字(算法-排序)
|
C语言
【C语言刷题】调整奇数偶数顺序、有序序列合并以及有序序列判断
【C语言刷题】调整奇数偶数顺序、有序序列合并以及有序序列判断
69 0
|
存储
OJ题库:俩个有序序列(数组)合并
OJ题库:俩个有序序列(数组)合并
46 0