#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 拼成最小的数(字符串的排序)的更多相关文章

  1. 51nod 1097 拼成最小的数

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 设有n个正整数,将它们联接成一排,组成一个最小的多位整数.     例如: n=2时,2个整数32, ...

  2. 51 nod 1097 拼成最小的数 思路:字符串排序

    题目: 思路:1.以字符串输入这些整数. 2.对这些字符串排序,排序规则为尽量让能让结果变小的靠前. 代码中有注释,不懂的欢迎在博客中评论问我. 代码: #include <bits\stdc+ ...

  3. 剑指offer-第五章优化时间和空间效率(把数组排列成最小的数)

    题目:输入一个正整数数组,将所有的数,排列起来,组成一个最小的数.

  4. 剑指 offer set 13 把数组排成最小的数

    总结 1. 给定 3, 32, 321 将他们组合成最小的数, 比如 321323 2. 3    ->   333 32   ->   322 321 ->   321 然后再排序

  5. 剑指Offer面试题33(java版):把数组排成最小的数

    题目:输入一个正整数数组.把数组里面全部的数字拼接排成一个数,打印能拼接出的全部数字中的一个.比如输入数组{3,32.321}.则打印出这3个数字能排成的最小数字321323. 这个题目最直接的做法应 ...

  6. jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组

    $.ajax({ url: baseURL + "InvoiceSale/OnQuotaInvoiceSale", //点击核销单号时,点击核销时,交互的页面           ...

  7. 《剑指offer》---把数组排成最小的数

    本文算法使用python3实现 1 题目描述:   输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组 $ [3,32,321] $ ,则打印出这 ...

  8. 剑指Offer:把数组排成最小的数【45】

    剑指Offer:把数组排成最小的数[45] 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如,输入数组是{3.32.321},则打印出来的这3 ...

  9. leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数

    这两个题几乎是一样的,只是leetcode的题是排成最大的数,剑指的题是排成最小的 179. Largest Number a.需要将数组的数转换成字符串,然后再根据大小排序,这里使用to_strin ...

随机推荐

  1. ubuntu 查看网卡 数据包处理 速度

    ubuntu 查看网卡 数据包处理 速度 sar -l 1 10 首先要安装sar .使用 apt-get install atsar sar 命令中的 "-l"參数是 net-i ...

  2. Linux环境下安装Tomcat

    一.准备安装的tar包 1.将安装包放在服务器上:apache-tomcat-7.0.81.tar.gz 2.将安装包解压:tar -zxvf apache-tomcat-7.0.81.tar.gz ...

  3. a little riak book

    a little riak book 的无聊总结 <pre name="code" class="python">#!/bin/bash # Ria ...

  4. chatty: uid=10549(u0_a549) com.exampleidentical 40 lines

    主要是因为你的app在短时间内输出太多次的日志,导致日志丢失 As soon as app considered 'chatty' by logcat (more than 5 lines per s ...

  5. js中const,var,let区别 今天第一次遇到const定义

    今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...

  6. [转]FPGA入门——basys2开发板的伪随机gold码的生成

    本文原创,转载请注明出处:http://www.cnblogs.com/risten/p/4166169.html 1.系统原理 通过频率控制字选择相位步进,产生访问ROM的地址,进而控制DAC的输出 ...

  7. BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告

    题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?pid=1002&cid=530 (格式有一点点问题,直接粘 ...

  8. html5--select与HTML5新增的datalist元素

    html5--select与HTML5新增的datalist元素 学习要点 掌握select元素与datalist元素的使用 select元素 用来建立一个下拉菜单选项列表 不仅可以在表单中使用,还可 ...

  9. hdu-5742 It's All In The Mind(数学)

    题目链接: It's All In The Mind Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (J ...

  10. ubuntu 下编译安装ceph

    git clone --recursive https://github.com/ceph/ceph.git  cd ceph/  sudo apt-get install libtool   sud ...