输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。
数据范围:
序列中的值都满足 
第一行输入一个整数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;
}