把數組排成最小的數

來源:互聯網
上載者:User

題目描述:

輸入一個正整數數組,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則列印出這三個數字能排成的最小數字為321323。

輸入:

輸入可能包含多個測試範例。
對於每個測試案例,輸入的第一行為一個整數m (1<=m <=100)代表輸入的正整數的個數。
輸入的第二行包括m個正整數,其中每個正整數不超過10000000。

輸出:

對應每個測試案例,
輸出m個數字能排成的最小數字。

範例輸入:

323 13 6223456 56
範例輸出:
132362345656

思路:排序輸出即可,痛點在於排序演算法怎樣實現。

可以通過比較組合的字串的大小來排序原來的整數數組,例如 32和321比較的結果是 ”32321“>”32132″ 所以認為 32是大於321的。


AC代碼:

(經驗之談:如果題目中告訴了數組大小,那麼就不要用malloc去動態開闢記憶體了,這樣反而會使問題變複雜)

#include<stdio.h>#include<stdlib.h>#include<string.h>const int N = 10;char num[101][10];  int cmp(const void *a, const void *b) {    char ab[2*N], ba[2*N];    char *temp_a = (char *)a;    char *temp_b = (char *)b;    strcpy(ab, temp_a);    strcpy(ba, temp_b);    strcat(ab, temp_b);    strcat(ba, temp_a);    return strcmp(ab, ba);} int main() {    int m, i;    while(scanf("%d", &m) != EOF) {        for(i = 0; i < m; i++) {            scanf("%s", num[i]);        }        qsort(num, m, sizeof(char)*N, cmp);        for(i = 0; i < m; i++) {            printf("%s", num[i]);        }        putchar('\n');    }    return 0;} /**************************************************************    Problem: 1504    User: wusuopuBUPT    Language: C    Result: Accepted    Time:100 ms    Memory:920 kb****************************************************************/

參考:

http://www.xuebuyuan.com/1531005.html

http://blog.csdn.net/zhu_liangwei/article/details/10857931

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.