博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组排序组合最小数字
阅读量:5367 次
发布时间:2019-06-15

本文共 1462 字,大约阅读时间需要 4 分钟。

给定一个整型数组,对这个数组排序,使得按序拼接数组各个元素得到的数值最小。

例如 [3,83,8,13,1]  排序后为:[1,13,3,83,8] 依次拼接得到 1133838

思路:

一,如果不考虑效率,那么可以对所有的数字进行依次排列组合,求出最小的那么效率不高,而且实现所有数字的排列组合也比较麻烦。

二:换个思路,首先还是对数组进行排序,求出排序后拼接最小的数字,外部排序可以选用各种常用的排序算法,这里选用选择排序。关键是比较两个元素谁在前边,谁在后边。多个元素排列组合比较麻烦,但是选取两个元素排列组合就比较方便了,就可以判断两个元素的先后顺序。需要注意的是,要考虑数组元素是否为0,如果有元素为0,那么这个元素不能够作为数组的第一个元素。

/*实现一个数组排序,排序后按照顺序拼接,得到的是最小的数字*/#include
#include
#include
using namespace std;//判断数字的前后顺序bool compare(int a,int b){ if (a == 0 || b==0) return false; //计算数字的位数 int num1 = a; int num2 = b; int len1 = 0, len2 = 0; while(num1>0) { num1 = num1/10; len1++; } while(num2>0) { num2 = num2/10; len2++; } num1 = a*pow(10.0,len2)+b; num2 = b*pow(10.0,len1)+a; if (num1>num2)return false; else return true;}int main(){ int a[5]={
3,83,0,13,1}; //排序使用 选择排序法,主要是判断那个数字排前边,那个数字排后边而不是简单的根据数字大小排序 for (int i = 0; i < 5; i++) { for (int j = i+1; j < 5; j++) { if(!compare(a[i],a[j])) { if (a[i]==0 && i!=0) continue; if (a[j]==0 && i==0) continue; int tem = a[j]; a[j] = a[i]; a[i] = tem; } } } //打印 for (int i = 0; i < 5; i++) { printf("%d",a[i]); } return 0;}

 

转载于:https://www.cnblogs.com/newpanderking/p/3931115.html

你可能感兴趣的文章
git diff 的用法
查看>>
一段sql的优化
查看>>
十进制与十六进制的相互转换
查看>>
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>
POJ1062 昂贵的聘礼
查看>>
【零基础学习iOS开发】【02-C语言】08-基本运算
查看>>
Java 将指定字符串连接到此字符串的结尾 concat()
查看>>
Hibernate Criterion
查看>>
Python知识
查看>>
我们为什么要搞长沙.NET技术社区(三)
查看>>
杭电acm Cake
查看>>
js函数中this的指向
查看>>
c++ 引用方式传递数组
查看>>
HBase学习之路 (九)HBase phoenix的使用
查看>>
LeetCode() Remove Duplicates from Sorted Array II
查看>>
【svn】idea svn 文件上会出现一个破书
查看>>
cocos2d-x 3.0 场景切换特效汇总(转)
查看>>
The SortedMap Interface
查看>>
SniperOJ-leak-x86-64
查看>>