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
    在这里插入图片描述
    做完了.

  • 相关阅读:
    尝试用phpmyadmin去getshell
    docker入门及环境搭建
    初始sql注入
    用BurpSuite爆破DVWA
    Sudo提权漏洞复现
    maccms后门分析
    webpack构建流程分析笔记
    《图解 HTTP》 阅读摘要
    offsetHeight、clientHeight、scrollHeight、offsetLeft 区别笔记
    js ==和===的区别
  • 原文地址:https://www.cnblogs.com/littlefrog/p/11939497.html
Copyright © 2011-2022 走看看