排序組成最大數(純C)
阿新 • • 發佈:2019-02-19
題目描述 Description
設有n個正整數(n≤20),將它們聯接成一排,組成一個最大的多位整數。
輸入描述 Input Description第一行一個正整數n。
第二行n個正整數,空格隔開。
輸出描述 Output Description連線成的多位數。
樣例輸入 Sample InputSample 1:
3
13 312 343
Sample 2:
4
7 13 4 246
樣例輸出 Sample OutputSample 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--;
}
}
}
}