華為機試題 把陣列排成最小的數 c

2021-07-12 00:53:05 字數 1694 閱讀 2033

題目描述:

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為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 和...