算法系列-----剑指offer
2016-06-06 16:24
337 查看
转载请注明出处:http://blog.csdn.net/ns_code/article/details/28128551题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。输入:输入可能包含多个测试样例。对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。输入的第二行包括m个正整数,其中每个正整数不超过10000000。输出:对应每个测试案例,输出m个数字能排成的最小数字。样例输入:
3 23 13 6 2 23456 56样例输出:
13236 2345656这道题主要要自定义一个比较组合后的数字的大小的规则,主要是对于数字m和n,先将其转化为字符串,而后比较其组合mn和nm的大小,这里直接按照字符串的大小标准来比较即可,最后用qsort进行排序,排序后的字符串数组中的字符串从左向右组合起来的字符串即使最小的字符串,即转化为整数后为最小的整数。 AC代码如下:[cpp] viewplain copy #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; }
相关文章推荐
- css模型
- 【JS设计模式】策略模式的代码示例
- 使用Jsoup解析Html == TextView显示html图片的方法
- 使用Json.net序列化和反序列化自定义日期
- reactjs入门到实战(八)----表单组件的使用
- javascript中的arguments
- react-native 把图片转化base64字符串
- window之间的通信
- JQuery_Ajax全解析
- js递归
- JavaScript拼接字符串
- angular.js学习手册(二)
- javascript 中断函数的使用 setInterval()——返回顶部
- js往前台传中文乱码问题解决
- Node学习笔记(三):基于socket.io web版你画我猜(二)
- javascript闭包
- css中的display
- JavaScript学习笔记四:对象
- 【leetcode】25. Reverse Nodes in k-Group
- Html编码和Uri编码