题目:
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。
输入描述:
第一行输入一个整数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; }
实现效果: