题意是给出n个整数(整数是小于1000的)。求这些整数拼出来的最大或最小整数。
思路:类似与排序,只是排序的比较规则是若ab<ba 则a<b。
1 // 此文件实现将输入的n个数(数小于1000)组合成一个大数,比且这个大数是组合中最小的一个 2 3 #include < stdio.h > 4 #include < stdlib.h > 5 #include < string .h > 6 7 8 static int num_sort( const void * a, const void * b) 9 { 10 const char * s1 = * (( const char ** )a); 11 const char * s2 = * (( const char ** )b); 12 int len1 = strlen(s1); 13 int len2 = strlen(s2); 14 char * cs1 = ( char * )malloc((len1 + len2 + 1 ) * sizeof ( char )); 15 char * cs2 = ( char * )malloc((len1 + len2 + 1 ) * sizeof ( char )); 16 strcpy(cs1,s1); 17 strcpy(cs1 + len1,s2); 18 strcpy(cs2,s2); 19 strcpy(cs2 + len2,s1); 20 int rt = strcmp(cs1,cs2); 21 free(cs1),free(cs2); 22 } 23 24 25 int main() 26 { 27 int n; 28 while ( 1 ) 29 { 30 scanf( " %d " , & n); 31 if (n <= 0 ) 32 break ; 33 char ** nums = ( char ** )malloc(n * sizeof ( char * )); 34 35 int i; 36 37 for (i = 0 ;i < n;i ++ ) 38 { 39 40 nums[i] = ( char * )malloc( 4 * sizeof ( char )); 41 scanf( " %s " ,nums[i]); 42 } 43 qsort(nums,n, 4 ,num_sort); 44 45 for (i = 0 ;i < n;i ++ ) 46 { 47 printf( " %s " ,nums[i]); 48 free(nums[i]); 49 } 50 printf( " \n " ); 51 free(nums); 52 } 53 return 0 ; 54 } 55
感觉C实现比C++不好的地方在于比较函数简洁度,这是由于string的操作都已经实现好了,还是站在巨人的肩膀上好啊。