排序组成最大数(纯C)

题目描述 Description

  设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。

输入描述 Input Description

  第一行一个正整数n。

  第二行n个正整数,空格隔开。

输出描述 Output Description

  连接成的多位数。

样例输入 Sample Input

     Sample 1:

     3

     13 312 343

    Sample 2:

    4

    7 13 4 246

样例输出 Sample Output

   Sample 1:

  34331213

  Sample 2:

  7424613

数据范围及提示 Data Size & Hint

   n≤20 


这题我使用纯C写的,用C++的sort会更容易些。思路是对冒泡排序的排序条件进行适当的修改,然后直接输出即可

#include <stdio.h>
#include <string.h>
#define M 21
#define N 15

void swap(char *a,char *b);
void sort(char num[M][N],int n);

int main(void)
{
	int n=0;
	char num[M][N]={0};
	int i=0,j=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s",num[i]);
	}
	sort(num,n);
	for(j=0;j<n;j++)
	{
		printf("%s",num[j]);
	}
}

void swap(char *a,char *b)  //交换两个字符串
{
	char tmp[N];
	strcpy(tmp,a);
	strcpy(a,b);
	strcpy(b,tmp);
}

void sort(char num[M][N],int n)  //修改过后的冒泡排序
{
	int i=0,j=0,k=0;
	int a=0,b=0;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			a = num[j][k]-'0',b = num[j+1][k]-'0';
			if(a<b){
				swap(num[j],num[j+1]);
				k=0;
				continue;
			}
			else if(a==b&&num[j][k]!='\0'&&num[j+1][k]!='\0'){ //如果此位相等,则K++,读取第二位
				k++;
				j--;
			}
		}
	}
}

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要出家当道士

打赏是不可能,这辈子都不可能

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值