#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. log4j(转)

    让System.out.println回家种田,换句话说,就是该干嘛干嘛去. 您可能在想: System.out.println几乎在每个Java程序里都有那么几行,如何让他老人家回家种田呢? 我们怎 ...

  2. github for unity

  3. 基于Appium、Python的自动化测试

    基于Appium.Python的自动化测试环境部署和实践   第一章 导言 1.1 编制目的 该文档为选用Appium作为移动设备原生(Native).混合(Hybrid).移动Web(Mobile ...

  4. SDUT OJ 之 1571 《人品,有没有?》 字符串的处理问题

    人品,有木有? Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^ 题目描述 新一届的山东理工大学ACM网络擂台赛就要开始啦!听说晋级的选手有机 ...

  5. java多线程-多线程常识

    线程和进程的区别是什么?进程是一个正在运行的软件程序,打开资源管理器可以看到好多正在运行的进程,而线程则是程序中的顺序控制流,只能使用分配给程序的资源和环境.一个进程至少存在一个线程(主线程). 在j ...

  6. 提高scroll性能

    在DevTools中开始渲染,向下滑动一点点滚动条,然后停止滚动. 在结果中,注意frames总是在30ftps线上面,甚至都木有很接近69ftps线的(事实上帧执行的太缓慢以致于60ftps线在图上 ...

  7. linux c++ 连接mysql 数据库

    Mysql是数据库中的主流,因此我一直以为在Linux下配置会很很容易,结果Google了大半天,大部分网页只说了如何安装Mysql之类的废话,对如何使用C/C++连接Mysql却只字不提,或者提的方 ...

  8. 装饰器 decorator

    装饰器 def document_it(func): def new_function(*args, **kwargs): print('Running function:', func.__name ...

  9. 51nod1934:受限制的排列 (分治+组合数)

    对于一个  11 到  nn 的排列  p1,p2,⋯,pnp1,p2,⋯,pn ,我们可以轻松地对于任意的  1≤i≤n1≤i≤n 计算出  (li,ri)(li,ri) ,使得对于任意的  1≤L ...

  10. Java笔记(四)

    13. 集合框架: 集合中存储的都是对象的引用(地址) 迭代器:集合的取出元素的方式 import java.util.ArrayList; import java.util.Iterator; pu ...