题目要求如下:
在输入的过程中,我们需要找到最大值,并将其从排序的列表中剔除。接着再对列表进行排序,即可得到对应的结果。
我们可以定义1个变量b表示当前最大的值,接着在后续的输入中与其值进行比较,如果输入的值比最大值大,则将最大值加入到排序的数组中去,否则将输入值加入到排序的数组中去。
对应的实现代码如下:
#include <stdio.h>
#include <stdlib.h>
int int_compare(const void *p1,const void *p2){
int *a = (int *)p1;
int *b = (int *)p2;
return *a-*b;
}
int main(int argc, char const *argv[])
{
int num;
while(~scanf("%d",&num)){
int a, b = 0, j=0;
if (num>1){
int c[1000] = {0};
for (int i = 0; i < num; ++i)
{
scanf("%d",&a);
// 输入值比最大值大
if (a > b)
{
if (j>=1)
{
//之前已经存在最大值,则将之前最大值比当前值小,加入到排序数组
c[j] = b;
}
// 更新最大值为当前输入值
b = a;
j++;
}else{
c[j] = a;
j++;
}
}
qsort(c, j, sizeof(int), int_compare);
printf("%d\n", b);
// 数组初始值为1,因为输入的最小整型值为1,其大于初始值最大值1,j++得到1
for (int k = 1; k < j; ++k)
{
printf("%d ", c[k]);
}
printf("\n");
}else{
scanf("%d",&a);
printf("%d\n", a);
printf("-1\n");
}
}
return 0;
}
最终通过后的结果如下: