題目描述:輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
輸入:輸入可能包含多個測試樣例。對於每個測試案例,輸入的第一行為乙個整數m (1<=m <=100)代表輸入的正整數的個數。輸入的第二行包括m個正整數,其中每個正整數不超過10000000。
輸出:對應每個測試案例,輸出m個數字能排成的最小數字。
樣例輸入:
323 13 6
223456 56
樣例輸出:
132362345656
感覺很簡單的題目,自己嘗試了幾個測試用例都對的,提交後 全部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。思路是先把...