Codeup[100000581]特殊排序

该博客介绍了一种特殊的排序方法,通过在输入过程中不断找到最大值并剔除,然后重新排序来达到目的。博主使用C++编程语言,定义变量记录最大值并与后续输入比较,动态更新排序数组。最终展示了解决方案的执行结果。
摘要由CSDN通过智能技术生成

题目要求如下:
在这里插入图片描述在输入的过程中,我们需要找到最大值,并将其从排序的列表中剔除。接着再对列表进行排序,即可得到对应的结果。
我们可以定义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;
}

最终通过后的结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值