列表

详情


BC122. 有序序列判断

描述

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

数据范围: 序列中的值都满足

输入描述

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

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 308KB, 提交时间: 2021-09-12

#include<stdio.h>
#include<assert.h>
int pd(int *a,int n)
{
    assert(a&&n);
    int f1=1;
    int f2=1;
    int i=0;
    for(i=0;i<n-1;i++)
    {
        if(a[i]>a[i+1])
        {
            f1=0;
        }
    }
    for(i=0;i<n-1;i++)
    {
        if(a[i]<a[i+1])
        {
            f2=0;
        }
    }
    return (f1||f2);
}
int main()
{
    int a[50];
    int i,N;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d ",&a[i]);
    }
    if(pd(a,N))
    {
        printf("sorted\n");
    }
    else
    {
        printf("unsorted\n");
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 328KB, 提交时间: 2021-09-10

#include <stdio.h>
#include <stdlib.h>

int is_sorted(const int* arr, int size)
{
    int flag_1 = 1;
    int flag_2 = 1;
    
    for (int i = 0; i < size - 1; i++)
    {
        if (arr[i] > arr[i+1])
        {
            flag_1 = 0;
        }
    }
    
    for (int i = 0; i < size - 1; i++)
    {
        if (arr[i] < arr[i+1])
        {
            flag_2 = 0;
        }
    }
    return (flag_1 || flag_2);
}

int main()
{
    int* pArr = NULL;
    int count = 0;
    scanf("%d", &count);
    pArr = malloc(4 * count);
    for (int i = 0; i < count; i++)
    {
        scanf("%d", &pArr[i]);
    }
    if (is_sorted(pArr, count))
    {
        printf("sorted\n");
    }
    else
    {
        printf("unsorted\n");
    }
    
    if (pArr != NULL)
    {
        free(pArr);
        pArr = NULL;
    }
    
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 336KB, 提交时间: 2021-09-12

#include <stdio.h>
#include <assert.h>

int is_sorted_in_ascend_order(int* arr, int sz){
    assert(arr);
    assert(sz);
    int i = 0;
    int flag = 0;
    for(i = 0; i < sz - 1; i++){
        if(arr[i] < arr[i + 1]){
            flag = 0;
        }
        else{
            flag = 1;
            break;
        }
    }
    return flag;
}

int is_sorted_in_reverse_order(int* arr, int sz){
    assert(arr);
    assert(sz);
    int i = 0;
    int flag = 0;
    for(i = 0; i < sz - 1; i++){
        if(arr[i] > arr[i + 1]){
            flag = 1;
        }
        else if(arr[i] == arr[i+1]){
            flag = 2;
        }
        else{
            flag = 0;
            break;
        }
    }
    return flag;
}

int main () {
    
    int input = 0;
    scanf("%d", &input);
    int arr[input];
    int i = 0;
    while(scanf("%d", &arr[i]) != EOF){
        i++;
    }
    int result1 = is_sorted_in_ascend_order(arr, input);
    int result2 = is_sorted_in_reverse_order(arr, input);
    if((result1 == 0 && result2 == 0) || (result2 == 2)){
        printf("sorted");
    }
    else if(result1 == 1 && result2 == 1){
        printf("sorted");
    }
    else{
        printf("unsorted");
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 336KB, 提交时间: 2021-09-08

#include<stdio.h>
//第一行输入一个整数N(3≤N≤50)。
//第二行输入N个整数,用空格分隔N个整数。


//输出为一行,如果序列有序输出sorted,否则输出unsorted。

int main()
{
	int n = 0;
	int arr[50] = { 0 };
	scanf("%d", &n);//输入数组大小
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	int s1 = 0;
	int s2 = 0;
	for (i = 0; i < n-1; i++)
	{
		if (arr[i] <= arr[i + 1])
		{
			s1++;
		}
	}
	for (i = 0; i < n-1; i++)
	{
		if (arr[i] >= arr[i + 1])
		{
			s2++;
		}
	}
	//printf("%d,%d\n", s1,s2);
	if (s1 == (n - 1)||s2 == (n - 1))
	{
		printf("sorted\n");
	}
	else
	{
		printf("unsorted\n");
	}
	return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 348KB, 提交时间: 2021-09-09

#include <stdio.h>

int main()
{
    int n = 0;
    int arr[50] = {0};
    scanf("%d",&n);
    for(int i = 0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    if(arr[1] >= arr[0])//升序
    {
        int i = 0;
        for(i=1; i<n; i++)
        {
            if(arr[i] < arr[i-1])
                break;
        }
        if(i == n)//正常比较完结束循环,而不是出现arr[i+1] < arr[i]中途break 掉循环
        {
            printf("sorted\n");
            return 0;
        }
        printf("unsorted\n");
    }
    else//降序
    {
        int i = 0;
        for(i=1; i<n; i++)
        {
            if(arr[i] > arr[i-1])
                break;
        }
        if(i == n)//正常比较完结束循环,而不是出现arr[i+1] > arr[i]中途break 掉循环
        {
            printf("sorted\n");
            return 0;
        }
        printf("unsorted\n");
    }
    return 0;
}

上一题