首页 > 试题广场 >

特殊排序

[编程题]特殊排序
  • 热度指数:45122 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入一系列整数,将其中最大的数挑出(如果有多个,则挑出一个即可),并将剩下的数进行排序,如果无剩余的数,则输出-1。

输入描述:
输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。
接下来的一行有N个整数。


输出描述:
可能有多组测试数据,对于每组数据,
第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。
第二行将排序的结果输出。
示例1

输入

4
1 3 4 2

输出

4
1 2 3
#include <stdio.h>

///KY211 特殊排序
///找到最大的数,然后将其赋值-9999,直接排序,从a[1]开始输出
int main() {
    int n, a[1003] = {0};
    while (scanf("%d", &n) != EOF) {
        int i, maxx = -9999;
        for (i = 0; i < n; i++) {
            scanf("%d", &a[i]);
            if (a[i] > maxx)
                maxx = a[i];
        }
        for (i = 0; i < n; i++) {
            if (a[i] == maxx) {
                a[i] = -9999;
                break;
            }
        }
        int j, t;
        for (i = 0; i < n; i++)
            for (j = 0; j < n - i - 1; j++)
                if (a[j] > a[j + 1]) {
                    t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
        printf("%d\n", maxx);
        if (n == 1)
            printf("-1");
        else {
            for (i = 1; i < n; i++) {
                printf("%d ", a[i]);
            }
        }
    }
    return 0;
}
发表于 2023-01-26 19:49:37 回复(0)
#include<stdio.h>
#include<string.h>
int main(){
	int n;
	while(~scanf("%d",&n)){
		int i,j,x[n],t;
		for(i=0;i<n;i++){
			scanf("%d",&x[i]);
		}
		if(n>1){
			for(i=0;i<n;i++){
				for(j=i+1;j<n;j++){
					if(x[i]>x[j]){
						t=x[i];
						x[i]=x[j];
						x[j]=t;				
					}
				}
			}
			printf("%d\n",x[n-1]);
			for(i=0;i<n-1;i++){
                printf("%d ",x[i]);
			}	
		}
		else{
			printf("%d\n%d",x[0],-1);
		}
	}
    return 0;
}

发表于 2022-03-18 23:04:07 回复(0)
用了冒泡排序和qsort函数
#include <stdio.h>
#include <stdlib.h>
int str[1000],n;
void buble(){
     for(int i=0;i<n-1;i++){
        for(int j=0;j<n-1-i;j++){
            if(str[j]>str[j+1]){
                int temp=str[j+1];
                str[j+1]=str[j];
                str[j]=temp;
            }
        }
    }
}
int cmp(const void *a,const void *b){
    return *(int *)a-*(int *)b;
}
int main(){
    while(scanf("%d\n",&n)!=EOF){
        for(int i=0;i<n;i++){
            scanf("%d",&str[i]);
        }
        //buble();
        qsort(str,n,sizeof(str[0]),cmp);
        if(n==1){
            printf("%d\n",str[0]);
            printf("-1");
        }else{
            printf("%d\n",str[n-1]);
            for(int i=0;i<n-1;i++){
            printf("%d ",str[i]);
            }
        }
        
    }
    return 0;
}
C++:
不同的地方在于sort(str,str+n);
发表于 2022-02-22 15:38:51 回复(0)