【剑指offer】设置在最小数目的阵列
生活随笔
收集整理的這篇文章主要介紹了
【剑指offer】设置在最小数目的阵列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請注明出處:http://blog.csdn.net/ns_code/article/details/28128551
題目描寫敘述:輸入一個正整數數組,把數組里全部數字拼接起來排成一個數。打印能拼接出的全部數字中最小的一個。
比如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字為321323。
輸入可能包括多個測試例子。
對于每一個測試案例,輸入的第一行為一個整數m (1<=m <=100)代表輸入的正整數的個數。
輸入的第二行包括m個正整數,當中每一個正整數不超過10000000。
相應每一個測試案例,
輸出m個數字能排成的最小數字。
? ? AC代碼例如以下:
#include<stdio.h> #include<stdlib.h> #include<string.h>char strs[100][10];/* 自己定義比較規則 */ int mycompare(const void *str1,const void *str2) {static char s1[20];static char s2[20];char *string1 = (char *)str1;char *string2 = (char *)str2;//將兩個字符串合并在一起sprintf(s1,"%s%s",string1,string2);sprintf(s2,"%s%s",string2,string1);return strcmp(s1,s2); }/* 以字符串形式打印出最小的整數 */ void PrintMinNum(int *nums,int len) {if(nums==NULL || len<1)return;int i;//將整數寫入到字符串中for(i=0;i<len;i++)sprintf(strs[i],"%d",nums[i]);//依照mycompare中指定的規則排序qsort(strs,len,10*sizeof(char),mycompare);for(i=0;i<len;i++)printf("%s",strs[i]);printf("\n"); }int main() {int nums[100];int m;while(scanf("%d",&m) != EOF){int i;for(i=0;i<m;i++) scanf("%d",nums+i);PrintMinNum(nums,m);}return 0; } ? ??/**************************************************************????Problem: 1504????User: mmc_maodun????Language: C++????Result: Accepted????Time:240 ms????Memory:1020 kb****************************************************************/
總結
以上是生活随笔為你收集整理的【剑指offer】设置在最小数目的阵列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 风险案例-25期-与有过合作经历客户在新
- 下一篇: VC++读取图像RGB值