zoukankan      html  css  js  c++  java
  • 题解:牛客网16783——拼数

    原题链接: https://ac.nowcoder.com/acm/problem/16783

    题目简述:

    给你NN个数,用它们拼成一个数,使得拼成的数最大。

    思路及代码:

    例如:1331234313,312,343拼成的数就是:3433121334331213
    简单无脑:

    #include <bits/stdc++.h>
    using namespace std;
    bool cmp(int a,int b) {
        return a>b;
    }
    int main() {
        int a;
        cin>>a;
        int n[1010101];
        for(int i = 0;i<a;++i) {
            cin>>n[i];
        }
        sort(n,n+a,cmp);
        for(int i = 0;i<a;++i) {
            cout<<n[i];
        }
    }
    

    可是你会发现,这不行!因为这组数据:
    44个整数71342467,13,4,246联接成的最大整数为:74246137424613

    上面这个代码在比较7和246时出现了问题。

    这时就要用到字符串。

    字符串是C++的特色,具有如下特点:

    1. 转换方便,提供转换函数to_string()
    2. 操作简单易学
    3. 常用操作里面都有封装好了的函数,不用你自己求,例如substr(),length()等等。

    就有了如下代码:

    #include <bits/stdc++.h>
    using namespace std;
    bool cmp(string a,string b) {
        return a+b>b+a;
    }
    int main() {
        int a;
        cin>>a;
        string n[1010101];
        for(int i = 0;i<a;++i) {
            cin>>n[i];
        }
        sort(n,n+a,cmp);
        for(int i = 0;i<a;++i) {
            cout<<n[i];
        }
    }
    

    为什么上面cmp可以这样写,因为对字符串使用+号计算机会将这两个字符串拼接起来,而不是真正意义上的加法(这点与int float等不同)

    于是针对上面那组数据,这个cmp其实是在将72462467比较大小。

    OK
    在这里插入图片描述
    做完了.

  • 相关阅读:
    C++ using namespace std详解
    FlexEdit强大的文本编辑器(免费的!)
    串口扩展方案总结
    LED数码引脚图
    串口扩展方案总结
    C++ using namespace std详解
    Digital Mars Compiler简介及使用
    Digital Mars Compiler简介及使用
    poj1018
    poj3536
  • 原文地址:https://www.cnblogs.com/littlefrog/p/11939497.html
Copyright © 2011-2022 走看看