51Nod 1097 拼成最小的数(字符串的排序)
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm> using namespace std; const int MAXN = 1e4 + ;
const int MAXA = ; struct num
{
char A[MAXA]; // 数据
int num; // 值
int len; // 长度
} Num[MAXN]; bool cmp(num a, num b)
{
// 长度相同则比较大小
if (a.len == b.len)
{
return a.num < b.num;
} int lenMin = a.len > b.len ? b.len : a.len; // 逐位比较 从小到大排
for (int i = ; i < lenMin; i++)
{
if (a.A[i] != b.A[i])
{
return a.A[i] < b.A[i];
}
} // 一个是另一个的前缀
if (a.len > b.len)
{
int i = ;
while (a.A[lenMin] == a.A[i])
{
lenMin++;
i++;
}
if (lenMin == a.len)
{
return a.A[] > a.A[];
}
return a.A[lenMin] < a.A[i];
}
else
{
int i = ;
while (b.A[lenMin] == b.A[i])
{
lenMin++;
i++;
}
if (lenMin == b.len)
{
return b.A[] < b.A[];
}
return !(b.A[lenMin] < b.A[i]);
}
} int main()
{ int N;
cin >> N; int len = ;
for (int i = ; i < N; i++)
{
scanf("%s", Num[i].A);
Num[i].num = atoi(Num[i].A);
//atoi((string)or(char a[])),将字符串换成整数
Num[i].len = strlen(Num[i].A);
len += Num[i].len;
}
sort(Num, Num + N, cmp);
int flag = ;
for (int i = ; i < N; i++)
{
if (flag + Num[i].len < )
{
flag += Num[i].len;
cout << Num[i].A;
}
else
{
for (int j = ; j < Num[i].len; j++)
{
cout << Num[i].A[j];
if (++flag == )
{
cout << endl;
flag = Num[i].len - j - ;
printf("%s", Num[i].A + j + );
break;
}
}
}
}
cout << endl;
return ;
}
51Nod 1097 拼成最小的数(字符串的排序)的更多相关文章
- 51nod 1097 拼成最小的数
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 设有n个正整数,将它们联接成一排,组成一个最小的多位整数. 例如: n=2时,2个整数32, ...
- 51 nod 1097 拼成最小的数 思路:字符串排序
题目: 思路:1.以字符串输入这些整数. 2.对这些字符串排序,排序规则为尽量让能让结果变小的靠前. 代码中有注释,不懂的欢迎在博客中评论问我. 代码: #include <bits\stdc+ ...
- 剑指offer-第五章优化时间和空间效率(把数组排列成最小的数)
题目:输入一个正整数数组,将所有的数,排列起来,组成一个最小的数.
- 剑指 offer set 13 把数组排成最小的数
总结 1. 给定 3, 32, 321 将他们组合成最小的数, 比如 321323 2. 3 -> 333 32 -> 322 321 -> 321 然后再排序
- 剑指Offer面试题33(java版):把数组排成最小的数
题目:输入一个正整数数组.把数组里面全部的数字拼接排成一个数,打印能拼接出的全部数字中的一个.比如输入数组{3,32.321}.则打印出这3个数字能排成的最小数字321323. 这个题目最直接的做法应 ...
- jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组
$.ajax({ url: baseURL + "InvoiceSale/OnQuotaInvoiceSale", //点击核销单号时,点击核销时,交互的页面 ...
- 《剑指offer》---把数组排成最小的数
本文算法使用python3实现 1 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组 $ [3,32,321] $ ,则打印出这 ...
- 剑指Offer:把数组排成最小的数【45】
剑指Offer:把数组排成最小的数[45] 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如,输入数组是{3.32.321},则打印出来的这3 ...
- leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数
这两个题几乎是一样的,只是leetcode的题是排成最大的数,剑指的题是排成最小的 179. Largest Number a.需要将数组的数转换成字符串,然后再根据大小排序,这里使用to_strin ...
随机推荐
- 2 Maven使用入门
一.编写pom.xml文件 Maven项目的核心是pom.xml.POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等. ...
- 事件 MotionEvent
点击和长按可能会同时发生,需要在长按的回调函数中返回true,就不会产生点击.谁处理事件谁就是消费者 如果view组件不处理事件,最后会让ontouchevent处理,它是备胎 <LinearL ...
- Struts2中的redirect参数传递
在Action之间传递参数有如下方法: (方法一): Xml代码 1. <result name="topic" type="redirect">f ...
- 怎样使用alsa API
翻译文章的链接: http://equalarea.com/paul/alsa-audio.html 关于怎么使用ALSA API教程 这份文档帮助对ALSA API使用入门.不是一个完整的ALSA ...
- LightOJ1370 Bi-shoe and Phi-shoe —— 欧拉函数
题目链接:https://vjudge.net/problem/LightOJ-1370 1370 - Bi-shoe and Phi-shoe PDF (English) Statistics ...
- YUV420数据和字符信息如何利用滤镜方法进行编码?
YUV420数据和字符信息如何利用滤镜方法进行编码?我希望用ffmpeg中的filter方法,把YUV420数据和字符信息一起编码,该怎么办呢? 本人目前只实现了把yuv420的数据进行h.264的编 ...
- multi_socket
threading_test.py #threading #为什么在命令行可以执行,F5不能执行 #线程处理能导致同步问题 from socketserver import TCPServer,Thr ...
- es6 import 报错
现在绝大多数的浏览器都不支持ES6,所以使用es6时需要使用bebal把es6转化为es5, 项目目录: demo1:单个js文件的转化 src文件下的 test1.js const aa=" ...
- docker容器firewalld端口转发规则
docker容器firewalld端口转发规则 1.配置firewalld端口转发,要先打开端口转发,则需要先 #firewall-cmd --zone=public --add-maspuerade ...
- php 有时候难以输出显示的信息可以用ob缓冲区来做
有时候一些难以打印的信息可以通过缓冲区来做,比如手机扫码上的信息看不到这种, 当然也可以通过fiddler来抓包,也可以看到这些信息,直接上代码: <?php ob_start(); //开启缓 ...