算法笔记练习 4.1 排序 问题 B: 特殊排序
题目
题目描述
输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。
输入
输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。
接下来的一行有N个整数。
输出
可能有多组测试数据,对于每组数据,
第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。
第二行将排序的结果输出。
样例输入
5
5 3 2 4 1
样例输出
5
1 2 3 4
提示
如果数组中只有一个数,当第一行将其输出后,第二行请输出"-1"。
代码
#include <stdio.h>
#include <stdlib.h>
typedef long long LL;
int cmpInt(const void *ca, const void *cb);
int main(){
int n, i;
while (scanf("%d", &n) != EOF){
LL nums[n];
for (i = 0; i < n; ++i)
scanf("%lld", &nums[i]);
qsort(nums, n, sizeof(LL), cmpInt);
printf("%lld\n", nums[n-1]);
if (n == 1)
printf("-1\n");
else {
int flag = 0;
for (i = 0; i < n-1; ++i){
if (flag)
putchar(' ');
printf("%lld", nums[i]);
flag = 1;
}
putchar('\n');
}
}
return 0;
}
int cmpInt(const void *ca, const void *cb){
int ret = 0;
LL a = *(LL*)ca;
LL b = *(LL*)cb;
if (a > b)
ret = 1;
else if (a < b)
ret = -1;
return ret;
}