題目描述:
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
輸入:
輸入可能包含多個測試樣例。
對於每個測試案例,輸入的第一行為乙個整數m (1<=m <=100)代表輸入的正整數的個數。
輸入的第二行包括m個正整數,其中每個正整數不超過10000000。
輸出:
對應每個測試案例,
輸出m個數字能排成的最小數字。
樣例輸入:
3 23 13 6
2 23456 56
樣例輸出:
13236
2345656
注:markdownpad2中,一行文字需要換行,只需要在行末尾加上兩個空格即可。
解析 :按照整數形式,將若干個數字連線起來很麻煩,所以我們可以將整數轉化為字串,這樣連線起來我們可以使用庫函式。然後將字串陣列進行排序。 這裡注意的是字串的比較函式需要重新定義,不是比較a和b,而是比較ab與 ba。如果ab < ba,則a < b;如果ab > ba,則a > b;如果ab = ba,則a = b。比較函式的定義是本解決方案的關鍵。這道題其實就是希望我們能找到乙個排序規則,根據這個規則排出來的陣列能排成乙個最小的數字。
原始碼
#include #include #include using namespace std;
const int len =10;
char strs[100][len];
char comstr1[2*len];
char comstr2[2*len];
int mycompare(const void *str1,const void *str2)
注:markdownpad2中加入**塊可以在**塊前後加「```」
或者tab鍵 空四格
題目延伸:
1.
void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
引數:
1 待排序陣列首位址
2 陣列中待排序元素數量
3 各元素的占用空間大小
4 指向函式的指標,用於確定排序的順序
舉例:
對乙個長為1000的陣列進行排序時,int a[1000]; 那麼base應為a,num應為 1000,width應為 sizeof(int),comp函式隨自己的命名。
qsort(a,1000,sizeof(int),comp);
int comp(const void*a,const void*b)
2.
itoa()功能:將任意型別的數字轉換為字串。在中與之有相反功能的函式是atoi。itoa()不是c標準庫中的函式,而是windows平台下擴充套件的,標準庫中有sprintf(),功能比這個更強,用法跟printf()類似,以後專門學習:
char str[255];
sprintf(str, "%x", 100); //將100轉為16進製表示的字串。
把陣列排成最小的數(C )
題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。思路 sort 函式的使用方法 注 to string方法是將int型轉為string型 include include includ...
面試題 把陣列排成最小的數(C )
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則打出這3個數字能排成的最小數字321323。這個題目最直接的做法應該是先求出這個陣列中所有數字的全排列,然後把每個排列拼起來,最後求出拼起來的數字的最大值,這裡不過多敘述。根據排列組合的知識,...
把陣列排成最小的數
分析 這是09 年6這道題其實是希望我們能找到乙個排序規則,根據這個規則排出來的陣列能排成乙個最小的數字。要確定排序規則,就得比較兩個數字,也就是給出兩個數字m 和n,我們需要確定乙個規則m 和n哪個更大,而不是僅僅只是比較這兩個數字的數值哪個更大。根據題目的要求,兩個數字m 和n排成的數字mn 和...