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 ...
随机推荐
- const位置上的不同代表哪些不同的意义
const位置上的不同代表哪些不同的意义 exern的用法 这个可以引用在程序编译过程中编译进去的常量数据.换句话说正能在.h文件的声明赋值的常量才可以.并且常量的名字不能相同,如果相同会报错. 全局 ...
- spring类扫描注入-----类扫描的注解解析器
通过类扫描注入到容器中,这种方式,在实际开发中还是很常用的,可以看下自己的配置文件,就会发现,自己公司的项目,搞不好就是这么注入的. 起码,我发现我公司的项目就是这么干的. 下面来演示一下简单的例子: ...
- git解决冲突方式
Git解决冲突 安装beyond compare 4 2.配置git对比工具 #difftool 配置 git config --global diff.tool bc4 git config --g ...
- c和c++字符串分割
1.c++版本,第一个参数为待分割的字符串 , 第二个参数为分割字符串 std::vector<std::string> split(const std::string& s, c ...
- Microsoft visual studio关闭安全检查
在用Microsoft visual studio进行代码编写时,使用到列如sprintlf这种比较旧的指令,需要关闭Microsoft visual studio的安全检查: 设置预处理选项:a. ...
- Gibonacci number-斐波那契数列
Description In mathematical terms, the normal sequence F(n) of Fibonacci numbers is defined by the r ...
- heartbeat3.x部署安装
使用Heartbeat构建Linux双机热备系统 本文档版本号: V1.0 版 本 历 史 版本号 更新时间 说 明 创建者 V1.0 2013-3-23 修改版 金桥 1 部署环境 OS: Red ...
- 使用memcpy 复制unsigned int 型的数据
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/53214692 函数原型: void *memcpy(void *dest, con ...
- 想要删除table的某一行的js写法
<tr><td onclick="del_tr(this)" >删除</td></tr> // 删除一行 function del_ ...
- HDFS源码分析一-概述
HDFS 主要包含 NameNode, SecondaryNameNode, DataNode 以及 HDFS Client . 我们从以下这几部分讲: 1. HDFS概述 2. NameNode 实 ...