題目1504 把陣列排成最小的數

2021-06-22 15:16:02 字數 2838 閱讀 8274

題目描述:輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。

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

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

樣例輸入:

3

23 13 6

223456 56

樣例輸出:

13236

2345656

感覺很簡單的題目,自己嘗試了幾個測試用例都對的,提交後 全部wrong answer

#include #include typedef unsigned int u_int32_t;

typedef u_int32_t compare(u_int32_t,u_int32_t);

#define max_bit_count 8

u_int32_t comparetwoelementgetmax(u_int32_t first_arg,u_int32_t second_arg)

first_bits_count++;

first = first/10;

} u_int32_t i = --first_bits_count;

while(second)

second_bits_count++;

second = second/10;

} u_int32_t j = --second_bits_count;

if(f == 0 && s == 0)

while(i<=max_bit_count || j<=max_bit_count)

if(i>max_bit_count&& j<=max_bit_count)

else if(j>max_bit_count && i<=max_bit_count)

else if(i>max_bit_count && j>max_bit_count)

else

else

}} printf("不可能到這裡來\n");

return 0;

}u_int32_t comparestringgetmin(char* first,char *second,u_int32_t string_size)

else if(*(first+i) > *(second+i))

}return 0;

}u_int32_t comparetwoelementgetmaxindex(u_int32_t first_arg,u_int32_t second_arg)

while(second_arg)

i = 2*max_bit_count-1;

first_arg = first;

second_arg = second;

while(second_arg)

while(first_arg)

i++;

return comparestringgetmin(first_second+i,second_first+i,2*max_bit_count);

}void mergearray(u_int32_t *first,u_int32_t array_size1,u_int32_t *second,u_int32_t array_size2,compare my_compare)

else if(result == 1)

else if(result == 2)

}while(i < array_size1)

while(j < array_size2)

i = 0;

while(i < array_size1)

j = 0;

while(j < array_size2)

return;

}u_int32_t comparetwounsignedint(u_int32_t first_arg,u_int32_t second_arg)

else if(first_arg < second_arg)

return 2;

}void mergesort(u_int32_t *target_array,u_int32_t array_size)

if(begin!=array_size)

step = step*2;

} mergearray(target_array,step/2,target_array+step/2,array_size-step/2,comparetwoelementgetmaxindex);

//mergearray(target_array,step/2,target_array+step/2,array_size-step/2,comparetwounsignedint);

return;

}void printarrayinformatstring(u_int32_t* target_array,u_int32_t array_size)

strcat(num_string,num+j+1);

} printf("%s\n",num_string);

}int main()

{ u_int32_t m;

while(scanf("%u",&m)!=eof)

{ u_int32_t target_array[m];

for(u_int32_t i = 0; i

九度 1504 把陣列排成最小的數

題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。思路 1.最初的想法是比較兩個數時,較短的數末尾補最後乙個數,比如 233,23 233,233.然後判斷會變得比較複雜 2.正好昨晚...

演算法題目 把陣列排成最小的數

輸入乙個正整數陣列,陣列裡面所有數字拼接起來排成乙個數,列印能拼接出的所有數字最小的乙個。例如輸入陣列 3,32,321 則列印出最小數字321323 const int g maxnumberlength 10 char g strcombine1 new char g maxnumberleng...

程式設計題目 把陣列排成最小的數

68.把陣列排成最小的數 陣列 演算法 題目 輸入乙個正整數陣列,將它們連線起來排成乙個數,輸出能排出的所有數字中最小的乙個。例如輸入陣列,則輸出這兩個能排成的最小數字 32132。請給出解決問題的演算法,並證明該演算法。思路 首先,肯定要考慮溢位問題。開始想用字串,後來改為了用list。思路是先把...