输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。
数据范围: 序列中的值都满足
第一行输入一个整数N(3≤N≤50)。第二行输入N个整数,用空格分隔N个整数。
输出为一行,如果序列有序输出sorted,否则输出unsorted。
5 1 6 9 22 30
sorted
5 3 4 7 2 10
unsorted
5 1 1 1 1 1
sorted
#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只能跳出一层循环
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"); //逆序也算,这可咋办?我知道咋办了,我给他逆序再搞一个数组,成功~ } }
#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; }
#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"); }
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"); } } } }
#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; }
#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; }
#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数量大大增加
#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; }
#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; }
#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; } }
#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; }
#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; }
#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; }