博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
九度 1504:把数组排成最小的数
阅读量:5121 次
发布时间:2019-06-13

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

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

 

思路

1. 最初的想法是比较两个数时, 较短的数末尾补最后一个数, 比如 233, 23 -> 233, 233. 然后判断会变得比较复杂

2. 正好昨晚和室友闲聊, 谈到说到这道题, 才知道末尾补第一个数才是正解. 233, 23 -> 233, 232

3. 剑指 offer 上的解法更是简单粗暴, 直接将两个数拼出来看看就得了. 233, 23 -> 23233, 23323

4. 看完剑指 offer 上的正解, 真想抽自己的脸

 

代码

 

#include 
#include
#include
#include
#include
using namespace std;int numbers[200];string str_num[200];bool cmp(const string &str1, const string &str2) { string _str1 = str1; string _str2 = str2; _str1.append(str2); _str2.append(str1); return _str1 < _str2;}int main() { int n; while(scanf("%d", &n) != EOF) { for(int i = 0; i < n; i ++) scanf("%d", numbers+i); for(int i = 0; i < n; i ++) { char str[20]; sprintf(str, "%d", numbers[i]); str_num[i] = str; } sort(str_num, str_num+n, cmp); for(int i = 0; i < n; i ++) { cout << str_num[i]; } cout << endl; } return 0;}

 

转载于:https://www.cnblogs.com/xinsheng/p/3585331.html

你可能感兴趣的文章
转HTMLTestRunner 生成测试报告
查看>>
hdu_2925_Musical Chairs_201311121643
查看>>
14_输出映射2_resultMap
查看>>
test11
查看>>
iPhone的解锁、越狱、激活、固件等等是什么意思,有什么分别?(转)
查看>>
CVS
查看>>
为什么匿名内部类参数必须为final类型
查看>>
Codeforces 629 A. Far Relative’s Birthday Cake
查看>>
【框架学习与探究之日志组件--Log4Net与NLog】
查看>>
操作execl
查看>>
UESTC_导弹拦截 2015 UESTC Training for Dynamic Programming<Problem N>
查看>>
工作用到的SQL语句
查看>>
POJ1002 487-3279
查看>>
sqlserver 生成脚本执行创建索引
查看>>
权益保护-产权保护:专利申请
查看>>
【计算机网络】第二章 网络应用(4)
查看>>
pyqt5-QPlainTextEdit普通文本
查看>>
短信验证码js
查看>>
hadoop学习第二天之伪分布模式安装(下)
查看>>
初学微信小程序 TodoList
查看>>