C语言:实现有序序列判断

news/2024/11/29 19:57:17/

题目:

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

               

输入描述:

第一行输入一个整数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个整数用一个数组存储

              

(二).

判断是否有序升序 降序

有序的情况下,都是大于号都是小于号

             

两个变量分别表示 升序 降序

int flag1 = 0;        --        表升序满足升序关系 即 flag1 = 1

int flag2 = 0;        --        表降序满足降序关系 即 flag2 = 1

等于的话,flag1 和 flag2 都是 0

              

相邻两个数进行比较N个数比较 n-1 对

使用 for循环 循环进行比较

for循环 内使用 if条件判断语句

判断 前一个数 小于 后一个数,还是 前一个数 大于 后一个数

小于flag1 = 1 ,即 当前两个数是小于号,可能是升序

大于 flag2 = 1 ,即 当前两个数是大于号,可能是降序

                   

(三). 

判断完 升序 或 降序 后看 flag1 和 flag2 的情况来判断是否有序

               

如果 flag1 + flag2 == 2,说明 既有大于号又有小于号打印 unsorted 

其他情况:

flag1 + flag2 == 1的话,说明有序

flag1 + flag2 == 0的话,说明都相等,也是有序打印 sorted

                


                 

第一步:

(1). 输入数组长度N

              

(2). 输入N个整数一个数组进行存储

                     

实现代码:

#include <stdio.h>
int main()
{//输入数组长度N:int N = 0; //数组长度//输入:scanf("%d", &N);//输入N个整数,用一个数组进行存储:int arr[50] = { 0 };//输入N个整数:int i = 0;for (i = 0; i < N; i++){scanf("%d", &arr[i]);}return 0;
}

实现图片:

                 


                 

第二步:

判断是否有序升序 降序

有序的情况下,都是大于号都是小于号

             

(1).

两个变量分别表示 升序 降序

int flag1 = 0;        --        表升序满足升序关系 即 flag1 = 1

int flag2 = 0;        --        表降序满足降序关系 即 flag2 = 1

等于的话,flag1 和 flag2 都是 0

              

(2).

相邻两个数进行比较N个数比较 n-1 对

使用 for循环 循环进行比较

for循环 内使用 if条件判断语句

判断 前一个数 小于 后一个数,还是 前一个数 大于 后一个数

小于flag1 = 1 ,即 当前两个数是小于号,可能是升序

大于 flag2 = 1 ,即 当前两个数是大于号,可能是降序

                     

实现代码:

#include <stdio.h>
int main()
{//输入数组长度N:int N = 0; //数组长度//输入:scanf("%d", &N);//输入N个整数,用一个数组进行存储:int arr[50] = { 0 };//输入N个整数:int i = 0;for (i = 0; i < N; i++){scanf("%d", &arr[i]);}//判断是否有序:升序 或 降序//有序的情况下,都是 大于号 或 都是 小于号int flag1 = 0; //表示升序,满足升序关系 --> flag1=1int flag2 = 0; //表示降序,满足降序关系 --> flag2=1//判断过程中,//如果 flag1一直为1,flag2一直为0,说明是升序,//如果 flag2一直为1,flag1一直为0,说明是降序//等于的话,flag1和flag2都是0//相邻两个数进行比较,N个数,比较 N-1 对:for (i = 0; i < N-1; i++){if (arr[i] < arr[i + 1])//前一个数 小于 后一个数{flag1 = 1;//满足升序条件}else if (arr[i] > arr[i + 1])//前一个数 大于 后一个数{flag2 = 1;//满足降序条件}}return 0;
}

实现图片:

                 


                 

第三步:

判断完 升序 或 降序 后看 flag1 和 flag2 的情况来判断是否有序

               

如果 flag1 + flag2 == 2,说明 既有大于号又有小于号打印 unsorted 

其他情况:

flag1 + flag2 == 1的话,说明有序

flag1 + flag2 == 0的话,说明都相等,也是有序打印 sorted

                     

实现代码:

#include <stdio.h>
int main()
{//输入数组长度N:int N = 0; //数组长度//输入:scanf("%d", &N);//输入N个整数,用一个数组进行存储:int arr[50] = { 0 };//输入N个整数:int i = 0;for (i = 0; i < N; i++){scanf("%d", &arr[i]);}//判断是否有序:升序 或 降序//有序的情况下,都是 大于号 或 都是 小于号int flag1 = 0; //表示升序,满足升序关系 --> flag1=1int flag2 = 0; //表示降序,满足降序关系 --> flag2=1//判断过程中,//如果 flag1一直为1,flag2一直为0,说明是升序,//如果 flag2一直为1,flag1一直为0,说明是降序//等于的话,flag1和flag2都是0//相邻两个数进行比较,N个数,比较 N-1 对:for (i = 0; i < N-1; i++){if (arr[i] < arr[i + 1])//前一个数 小于 后一个数{flag1 = 1;//满足升序条件}else if (arr[i] > arr[i + 1])//前一个数 大于 后一个数{flag2 = 1;//满足降序条件}}//判断完 升序 或 降序 后,看 flag1 和 flag2 的情况来判断是否有序:if (flag1 + flag2 == 2)//说明既有 大于 又有 小于{printf("unsorted\n");}else// ==1 的话,说明有序;==0 的话,说明都相等,也是有序{printf("sorted\n");}return 0;
}

实现图片:

                    

思路一:最终代码和实现效果

最终代码:

#include <stdio.h>
int main()
{//输入数组长度N:int N = 0; //数组长度//输入:scanf("%d", &N);//输入N个整数,用一个数组进行存储:int arr[50] = { 0 };//输入N个整数:int i = 0;for (i = 0; i < N; i++){scanf("%d", &arr[i]);}//判断是否有序:升序 或 降序//有序的情况下,都是 大于号 或 都是 小于号int flag1 = 0; //表示升序,满足升序关系 --> flag1=1int flag2 = 0; //表示降序,满足降序关系 --> flag2=1//判断过程中,//如果 flag1一直为1,flag2一直为0,说明是升序,//如果 flag2一直为1,flag1一直为0,说明是降序//等于的话,flag1和flag2都是0//相邻两个数进行比较,N个数,比较 N-1 对:for (i = 0; i < N-1; i++){if (arr[i] < arr[i + 1])//前一个数 小于 后一个数{flag1 = 1;//满足升序条件}else if (arr[i] > arr[i + 1])//前一个数 大于 后一个数{flag2 = 1;//满足降序条件}}//判断完 升序 或 降序 后,看 flag1 和 flag2 的情况来判断是否有序:if (flag1 + flag2 == 2)//说明既有 大于 又有 小于{printf("unsorted\n");}else// ==1 的话,说明有序;==0 的话,说明都相等,也是有序{printf("sorted\n");}return 0;
}

实现效果:

                    

 =========================================================================

                       

思路二:边输入边判断

(输入两个数后就可以判断一次大小了)

总体思路:

思路一的基础上

             

思路一第一步的(2)输入N个数

放到 第二步(2)的 for循环中 

          

如果输入了两个数开始进行比较

                


              

第一步:

(1).

思路一第一步的(2)输入N个数

放到 第二步(2)的 for循环中 

          

(2).

如果输入了两个数开始进行比较

                     

实现代码:

#include <stdio.h>
int main()
{//输入数组长度N:int N = 0; //数组长度//输入:scanf("%d", &N);//输入N个整数,用一个数组进行存储:int arr[50] = { 0 };//判断是否有序:升序 或 降序//有序的情况下,都是 大于号 或 都是 小于号int flag1 = 0; //表示升序,满足升序关系 --> flag1=1int flag2 = 0; //表示降序,满足降序关系 --> flag2=1//判断过程中,//如果 flag1一直为1,flag2一直为0,说明是升序,//如果 flag2一直为1,flag1一直为0,说明是降序//等于的话,flag1和flag2都是0int i = 0;for (i = 0; i < N; i++){//输入:scanf("%d", &arr[i]);//输入了两个数后就开始比较if (i >= 1)// i=1 说明输入了 arr[0] 和 arr[1] ,已经输入了两个数{if (arr[i] < arr[i - 1])//因为进来后 i 以及是下标1了,还要判断下标0,arr[0]//一个数 小于 前一个数{flag1 = 1;//满足升序条件}else if (arr[i] > arr[i + 1])//一个数 大于 后一个数{flag2 = 1;//满足降序条件}}}//判断完 升序 或 降序 后,看 flag1 和 flag2 的情况来判断是否有序:if (flag1 + flag2 == 2)//说明既有 大于 又有 小于{printf("unsorted\n");}else// ==1 的话,说明有序;==0 的话,说明都相等,也是有序{printf("sorted\n");}return 0;
}

实现图片:

                    

思路二:最终代码和实现效果

最终代码:

#include <stdio.h>
int main()
{//输入数组长度N:int N = 0; //数组长度//输入:scanf("%d", &N);//输入N个整数,用一个数组进行存储:int arr[50] = { 0 };//判断是否有序:升序 或 降序//有序的情况下,都是 大于号 或 都是 小于号int flag1 = 0; //表示升序,满足升序关系 --> flag1=1int flag2 = 0; //表示降序,满足降序关系 --> flag2=1//判断过程中,//如果 flag1一直为1,flag2一直为0,说明是升序,//如果 flag2一直为1,flag1一直为0,说明是降序//等于的话,flag1和flag2都是0int i = 0;for (i = 0; i < N; i++){//输入:scanf("%d", &arr[i]);//输入了两个数后就开始比较if (i >= 1)// i=1 说明输入了 arr[0] 和 arr[1] ,已经输入了两个数{if (arr[i] < arr[i - 1])//因为进来后 i 以及是下标1了,还要判断下标0,arr[0]//一个数 小于 前一个数{flag1 = 1;//满足升序条件}else if (arr[i] > arr[i + 1])//一个数 大于 后一个数{flag2 = 1;//满足降序条件}}}//判断完 升序 或 降序 后,看 flag1 和 flag2 的情况来判断是否有序:if (flag1 + flag2 == 2)//说明既有 大于 又有 小于{printf("unsorted\n");}else// ==1 的话,说明有序;==0 的话,说明都相等,也是有序{printf("sorted\n");}return 0;
}

实现效果:


http://www.ppmy.cn/news/487575.html

相关文章

【跟晓月学shell脚本】掌握shell脚本变量实战案例

前言 上篇文章我们探讨了shell脚本变量的基本原理和概念&#xff0c;本篇我们基于上面的内容增加一些实战。 如果你还没有学习shell脚本的变量理论&#xff0c;可以点击链接&#xff1a;【跟晓月学shell脚本】掌握shell脚本变量原理及概念 可以关注我的云原生社区&#xff1…

【机器学习】树模型的三种序列化方式的区别(模型存储大小、序列化所用内存、序列化速度)

文章目录 一、导读二、模型运行例子三、运行内存计算四、保存和加载4.1 jsonpickle4.2 pickle4.3 模型自带 五、实验5.1 模型存储大小对比实验5.2 运行的memory对比实验 六、序列化时间对比七、源代码八、总结 一、导读 本文总结常用树模型&#xff1a; rf&#xff0c;xgboost…

php抓取网页特定div区块及图片,

1. 取得指定网页內的所有图片&#xff1a; <?php //取得指定位址的內容&#xff0c;並储存至text $textfile_get_contents(http://yourweb/); //取得第一個img标签&#xff0c;並储存至阵列match&#xff08;regex语法与上述同义&#xff09; preg_match(/<img[^>…

突然发现CSDN变得不一样了【建议】【活动】

突然发现CSDN变得不一样了【活动】 前言推荐突然发现CSDN变得不一样了关于上传代码包关于上传视频关于运行代码关于插入代码1关于插入代码2关于社区的建立关于社区的管理关于此次活动的评选关于排行突然发现说明一下关于我 最后 前言 2023-6-19 23:34:04 本文章仅用于参加 20…

Mysql漏洞处理之升级版本到5.7.42过程指导手册

一、背景 某次安全漏扫&#xff0c;发现MySQL大量漏洞&#xff0c;基于Mysql之用于内网&#xff0c;且版本确实有点旧&#xff0c;考虑升级&#xff0c;综合漏洞分析&#xff0c;只能升级到最新版5.7.42和8.0.33&#xff0c;现场环境&#xff1a;Mysql 5.7.28、5.7.20和mysql&…

Python+Requests+Unittest接口自动化测试

(1)接口自动化测试的意义、前后端分离思想 接口自动化测试的优缺点&#xff1a; 优点&#xff1a; 测试复用性。 维护成本相对UI自动化低一些。 为什么UI自动化维护成本更高&#xff1f; 因为前端页面变化太快&#xff0c;而且UI自动化比较耗时&#xff08;比如等待页面元素的…

我心中世界上最好的语言是PHP,别不信【偷笑】

文章目录 一、前言1.1 最适合的语言2.2 流行的语言2.3 Java和PHP2.4 PHP的性能2.5 关于PHP2.6 作文思路概览 二、PHP的优势2.1 跨平台2.2 开发运行环境搭建方便2.3 强大的包管理工具2.4 拥有优秀的代码调试工具xdebug2.5 上手快&#xff0c;学习成本低2.6 丰富的企业级框架2.7 …

Spring学习笔记一

目录 一、Spring简介二、IOC控制反转2.1入门案例2.3 Bean的常用属性配置 三、DI依赖注入3.1 set方法注入3.2 通过构造器注入3.3 复杂类型属性注入 四、Lombok六、配置文件6.1读取properties文件6.2 使用配置文件中的值 七、低频知识7.1 bean的配置7.1.1 name属性7.1.2 lazy-ini…