• 数的连接|NOIP1998 T2|贪心算法


    【题目链接】TYVJ1873

    【最大连接数】

    三、最大连接数 (NOIP 1998年提高组决赛第2题 maxnumber.pas)

    问题描述

    设有n个正整数,将他们连接成一排,组成一个最大的多位整数。例如:n=3时,3个整数13,312,343连成的最大整数为:34331213。又如:n=4时,4个整数7、13、4、246连接成的最大整数为7424613。

    输入文件

    两行:第一行单独一个N;第二行N个数。

    输出文件

    一行,连接成的多位数。

    输入样例

    3

    13 312 343

    输出样例

    34331213

    【分析】

    很容易可以想到:数字越大的放在最前面,最后组成的数字将会是最大的。然而这样的想法是错误的(不要问我怎么知道的>_<),不能用贪心?其实是标准选错了。不妨想既然要保证每个数字连接之后最大,那么就保证连接后的数字最大,同时为了保证数据的范围,很容易想到要用字符串来存储数据(不然会爆的~)。

    在C++中可以很轻松的将两个字符串连接起来,即使用运算符“+”,如:对于字符串”123”和”72”, ”123” + “72”  =  “12372”,  “72” + ”123” =  “72123”;

    如此只要比较两个字符串相加后的结果就好啦~

    【代码】

     1 #include 
     2 
     3 #include 
     4 
     5 #include 
     6 
     7  
     8 
     9 int main() {
    10 
    11        std::vector num;
    12 
    13        int n = 0;
    14 
    15        std::cin>>n;
    16 
    17        for(int i = 0; i < n; i++) {
    18 
    19               std::string tmp;
    20 
    21               std::cin>>tmp;
    22 
    23               num.push_back(tmp);
    24 
    25        }
    26 
    27        for(int i = 0; i < n-1; i++) {
    28 
    29               for(int k = i+1; k < n; k++) {
    30 
    31                      if(num[i]+num[k] < num[k]+num[i]) {
    32 
    33                             std::string tmp = num[i];
    34 
    35                             num[i] = num[k];
    36 
    37                             num[k] = tmp;
    38 
    39                      }
    40 
    41               }
    42 
    43        }
    44 
    45        for(int i = 0; i != num.size(); i++) {
    46 
    47               std::cout< 
    

  • 相关阅读:
    C语言初阶——实用调试技巧
    单片机之硬件记录
    【MySQL】 B+ 树存储的原理
    配置git-ssh
    关于EasyExcel的数据导入和单sheet和多sheet导出
    java毕业设计的影视资讯管理系统(附源码、数据库)
    [iOS开发]block再学习
    视频编码基础知识
    微信小程序|基于小程序实现人脸识别对比
    flask基础3-蓝图-cookie-钩函数-flask上下文-异常处理
  • 原文地址:https://blog.csdn.net/liuliuhelingdao/article/details/128171199