牛客网带你刷 · C语言 | 有序序列判断

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

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....

题目

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

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

输入描述:
第一行输入一个整数N(3 ≤ N ≤ 50)
第二行输入N个整数,用空格分隔N个整数

输出描述:
输出为一行,如果序列有序输出sorted,否则输出unsorted

示例
输入
5
1 6 9 22 30

输出
sorted


解法

1. 确定思路

  • 首先要考虑到,如果数列中的每个数相等,也算是有序数列
  • 我们直接比较相邻元素,如果先增后减或者,先减后增这种不单调的数列就不是有序的,但是这样判断有点难度
  • 所以我们反过来考虑,我就假设你是一直增的,左边就是一直比右边小的,假如10个元素,比较其实就是9次,这9次都是左边小于等于右边。如果最终结果表明,这个次数小于9次,说明就不是升序的
  • 降序同理

2. 编写代码

  • 按照上述的思路,先设计主函数部分。用一个数组接收输入的序列
    int n;
    scanf("%d", &n);
    int arr[n];
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    int sz = sizeof(arr) / sizeof(arr[0]);
  • 为了代码可读性强,把判断是否有序的功能封装成一个函数,并判断返回值
    int result = judge_sorted(arr, sz);
    if (result)
        printf("sorted\n");
    else
        printf("unsorted\n");
  • 函数实现部分采用上述思路,假设数列是升序(或降序),用count记录比较次数(符合升序或降序才记录)
    int count1 = 0;
    int count2 = 0;
    for (int i = 0; i < sz - 1; i++)
    {
        if (arr[i] <= arr[i + 1])
            count1++;
        if (arr[i] >= arr[i + 1])
            count2++;
    }
  • 当比较完所有元素后就会退出循环,这时就该判断count是否满足次数要求了
    if ((count1 == (sz - 1)) || (count2 == (sz - 1)))
        return 1;
    else
        return 0;
  • 试试看最终的功能:

在这里插入图片描述


在这里插入图片描述

相关文章
|
4月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
66 0
|
9月前
|
C语言
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(二)
我们可以通过创建并定义符号常量NUMBER,来作为判断是否胜利的标准。如三子棋中,令NUMBER为3,则这八个方向中有任意一个方向达成3子连珠,则连珠的这个棋子所代表的玩家获胜。
92 1
|
9月前
|
算法 C语言 C++
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(一)
三子棋游戏设计的核心是对二维数组的把握和运用。
115 1
|
8月前
【洛谷 P1618】三连击(升级版)题解(循环枚举+全排列)
该编程题目要求将数字1到9分为三组,形成三个三位数,使得这三个数成比例A:B:C。输入为A、B、C的值,输出符合条件的三位数组合,按首个数字升序排列。样例输入为1 2 3,输出多组解。代码使用全排列遍历数字,检查比例关系。若无解,则输出&quot;No!!!&quot;。
89 0
|
8月前
|
C语言
C语言学习记录——鹏哥二分法查找数组中元素 复习整理
C语言学习记录——鹏哥二分法查找数组中元素 复习整理
40 0
|
9月前
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
|
9月前
|
存储 算法 C语言
C语言练习记录(蓝桥杯练习)(小蓝数点)
C语言练习记录(蓝桥杯练习)(小蓝数点)
|
存储 算法 C语言
【C语言蓝桥杯每日一题】—— 递增序列
递增序列🙌 对于一个字母矩阵,我们称矩阵中的一个递增序列是指在矩阵中找到两个字母,它们在同一行,同一列,或者在同一 45 45 度的斜线上,这两个字母从左向右看、或者从上向下看是递增的。
169 0
|
C++
蓝桥杯练习题十一 - 乘积尾零(c++)
蓝桥杯练习题十一 - 乘积尾零(c++)
124 0
蓝桥杯练习题十一 - 乘积尾零(c++)
|
C语言
【维生素C语言】数组笔试题(附答案+详解)(一)
本章为数组部分的练习章节,一共八个大题。配备答案+详细画图解析。
94 0
【维生素C语言】数组笔试题(附答案+详解)(一)