劍指OFFER之把數組排成最小的數(九度OJ1504)

題目描述:

輸入一個正整數數組,把數組裏全部數字拼接起來排成一個數,打印能拼接出的全部數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。算法

 

輸入:

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

 

輸出:

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

 

樣例輸入:
3
23 13 6
2
23456 56

 

樣例輸出:
13236
2345656

解題思路:

  首先,最普通的思路就是權進行一次排列,找出最小的數。可是這樣可能會超時。spa

 

  這裏,咱們首先對數列進行排序,最後進行一次整合。算法上面主要採起冒泡排序,對每一個數與其前面的數進行比較。code

void bubbleSort(char c[][10],int n){ int i,j; for( i=n-1 ; i>0 ; i-- ){ for(j = n-1;j>(n-1-i);j--){ if(findSmall(c,j)) swap(c,j,j-1); } } }

 

 

在比較時,採用特別的思路----把兩個字符串進行拼接,若是字符串1排在前面的數小,那麼就把字符串1放到前面。blog

int findSmall(char c[][10],int i){ char stri[20]; char strj[20]; strcpy(stri,c[i]); strcpy(strj,c[i-1]); strcat(stri,c[i-1]); strcat(strj,c[i]); int k; int length = strlen(stri); 
    for(k=0;k<length;k++){ if(stri[k] == strj[k]) continue;
        else if(stri[k] < strj[k]){ return 1; }else{ return 0; } } }

 

排序後,能夠保證直接進行鏈接的數列是最小的。排序

所有代碼:

 

#include <stdio.h> #include <stdlib.h> #include <string.h>
void bubbleSort(char c[][10],int n); int findSmall(char c[][10],int i); void swap(char c[][10],int i,int j); int main(){ int n,i; while(scanf("%d",&n)!=EOF && n>0 && n<=100 ){ int arr[100]; char c[100][10]; char string[1000]; for(i=0;i<n;i++){ scanf("%d",&arr[i]); sprintf(c[i],"%d",arr[i]); } bubbleSort(c,n); strcpy(string,c[0]); for(i=1;i<n;i++){ strcat(string,c[i]); } printf("%s\n",string); } return 0; } void bubbleSort(char c[][10],int n){ int i,j; for( i=n-1 ; i>0 ; i-- ){ for(j = n-1;j>(n-1-i);j--){ if(findSmall(c,j)) swap(c,j,j-1); } } } int findSmall(char c[][10],int i){ char stri[20]; char strj[20]; strcpy(stri,c[i]); strcpy(strj,c[i-1]); strcat(stri,c[i-1]); strcat(strj,c[i]); int k; int length = strlen(stri); for(k=0;k<length;k++){ if(stri[k] == strj[k]) continue; else if(stri[k] < strj[k]){ return 1; }else{ return 0; } } } void swap(char c[][10],int i,int j){ char tmp[10]; int k; for(k=0;k<10;k++){ tmp[k] = c[i][k]; c[i][k] = c[j][k]; c[j][k] = tmp[k]; } } /************************************************************** Problem: 1504 User: xhalo Language: C Result: Accepted Time:320 ms Memory:916 kb ****************************************************************/
相關文章
相關標籤/搜索