uva10905-Children's Game

題目大意:給你n個正整數,求將這n個整數重新組合後組成的最大正整數。例:給定n個正整數分別爲:90,901 ,89.這三個正整數共有6種組合方法最大的爲(9090189)結果輸出這個數。

題目思路:本題就是一個字符串排序問題,關鍵問題是如何排序,這裏需要用到幾個字符串處理函數。

strcpy(s1,s2)將s2的所有內容複製給s1

strcat(s1,s2),將s2的所有內容拼接在s1之後,形成一個新的s1串,長度是原來的s1+s2之和。

strcmp(s1,s2);從左到右比較兩個字符串,遇到結束符或者字符串不相等時退出,當s1==s2時返回0,s1小於s2時返回-1

s1大於s2時返回1。

我們只需要將輸入的所有字符串從”到小排序即可,大的在前面,那麼我們比較兩個字符串的大小時,只需要將他們組合成一個新的字符串,然後比較這個新的字符串的大小,就可決定誰應該在前面。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define MAX 55
#define MAXN 200
char map[MAX][MAXN];
int cmp(const void *aa,const void *bb)
{
    char *a=(char *)aa;
    char *b=(char *)bb;
    char sa[MAXN*2],sb[MAXN*2];
    strcpy(sa,a);
    strcat(sa,b);
    strcpy(sb,b);
    strcat(sb,a);
    return -strcmp(sa,sb);
}
int main()
{
    int n;
    while (scanf("%d",&n)!=EOF)
    {
        if (n==0)
            break;
        int i;
        for (i=0;i<n;i++)
        {
            scanf("%s",map[i]);
        }
        qsort(map,n,MAXN*sizeof(char),cmp);
        for (i=0;i<n;i++)
        {
            printf("%s",map[i]);
        }
        printf("\n");
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章