首页 > 其他分享 >【题解】#119. 最大整数 题解(2023-07-01更新)

【题解】#119. 最大整数 题解(2023-07-01更新)

时间:2023-07-01 16:26:19浏览次数:48  
标签:01 return 07 int 题解 2023 字符串 119

#119. 最大整数 题解

题目传送门

更新日志

  • 2023-05-26 17:20 文章完成
  • 2023-05-30 15:22 文章审核通过
  • 2023-07-01 16:04 修改了代码

题目知识点

字符串+贪心

题意说明

设有n个正整数($n<20$),将它们连接成一排,组成一个最大的多位整数。(题目简介明了,一看就是出题人懒得写题目背景

问题分析

拿到这道题,首先自然会想到大的字符串应该排在前面,因为如果A与B是两个由数字字符构成的字符串,且 $A>B$ ,一般情况下有 $A+B$$<$$B+A$ 的情况。如 $A=$ ' $121$ ', $B=$ ' $12$ ',则 $A+B=$ ' $12112$ ', $B+A=$' $12121$ ',所以 $A+B$$<$$B+A$ 。
为了解决这些问题,根据题意引进另一种字符串比较方法,将 $A+B$ 与 $B+A$ 相比较,如果前者大于后者,则认为 $A>B$ 。按这一定义将所有的数字字符串从大到小排序后连接起来所得到的数字字符串即是这个问题的解。排序时先将所有字符串中的最大值选出来存在数组的第一个元素中,再从第二到最后的一个元素中最大的字符串选出来存在第二个元素中,直到最后的两个元素中选出最大的字符串存在数组的倒数第二个元素为止。

代码+解释

// #119. 最大整数
// code by:st20250113
#include <bits/stdc++.h> //伟大的万能头文件
using namespace std;
int n;
struct num {
    int a, b;
} c[21];
int a(int x, int y) // x^y
{
    if (y == 0) {
        return 1;
    }
    if (y == 1) {
        return x;
    }
    int z;
    z = a(x, y / 2); // 这里可以和上面合并写作:int z=a(x,y/2);
    if (y % 2 == 1) {
        return z * z * x;
    } else {
        return z * z;
    }
}
bool abc(num x, num y) {
    int w, p;
    w = x.a * y.b + y.a;
    p = y.a * x.b + x.a;
    return w > p;
}
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> c[i].a;
        c[i].b = 0;
        int x;
        x = c[i].a; // 这里可以和上面合并写作:int x=c[i].a;
        while (x) {
            x /= 10;
            c[i].b++;
        }
        c[i].b = a(10, c[i].b);
    }
    sort(c + 1, c + n + 1, abc);
    for (int i = 1; i <= n; i++) {
        cout << c[i].a;
    }
    return 0; // 华丽结束
}
//QYC最帅

欢迎大家指出错误

标签:01,return,07,int,题解,2023,字符串,119
From: https://www.cnblogs.com/szyawa/p/17519437.html

相关文章

  • 【题解】P8679 [蓝桥杯 2019 省 B] 填空问题 题解
    P8679[蓝桥杯2019省B]填空问题题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-05-2521:02文章完成2023-05-2711:34文章通过审核2023-06-2021:03优化了文章代码格式试题A:组队【解析】本题是一道经典的DFS搜索题,每次对各号位的选手进行DFS,......
  • 【题解】P8741 [蓝桥杯 2021 省 B] 填空问题 题解
    P8741[蓝桥杯2021省B]填空问题题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-05-0923:19文章完成2023-05-0923:20通过审核2023-06-2021:03优化了文章代码格式试题A:空间【解析】本题考察计算机存储的基础知识,只要掌握空间存储的换算方法,就能......
  • 【题解】P8684 [蓝桥杯 2019 省 B] 灵能传输 题解
    P8684[蓝桥杯2019省B]灵能传输题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-06-2021:46文章完成【解析】本题涉及到了$3$种算法:前缀和,排序以及贪心(1)前缀和本题实际上要求通过某种灵能传输可以使得该序列的最大值最小。而由前缀和可知,当某一个前......
  • 【置顶】FZQOJ题解集(2023-07-01更新)
    #68.「NOIP2004」津津的储蓄计划题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-02-0117:20文章完成2023-02-0316:09文章审核通过2023-02-0422:15修改了注释2023-05-2709:27修改了$\LaTeX$2023-07-0115:45修改了代码题目知识点模拟题目分析......
  • 【置顶】luogu题解集(2023-07-01更新)
    P8679[蓝桥杯2019省B]填空问题题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-05-2521:02文章完成2023-05-2711:34文章通过审核2023-06-2021:03优化了文章代码格式试题A:组队【解析】本题是一道经典的DFS搜索题,每次对各号位的选手进行DFS,......
  • 01_Maven
    1.Maven是什么?Maven翻译为"专家"、"内行",是Apache下的一个纯Java开发的开源项目(https://maven.apache.org/)。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven是一个项目开发结构管理工具,可以对Java项目结构、......
  • 算法学习day03链表part01-203、707、206
    packageSecondBrush.LinkedList.LL1;/***203.移除链表元素*删除链表中等于给定值val的所有节点。*自己再次概述一下这个过程:*1.移除元素,要采用设置虚拟节点的方式,因为那样不需要考虑头结点问题*2.设置两个虚拟指向*3.移除元素就是遍历链表,然后碰到目标值......
  • 【题解】#373. 「USACO1.1」Friday the Thirteenth 题解(2023-07-01更新)
    #373.「USACO1.1」FridaytheThirteenth题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-02-0117:20文章完成2023-02-0318:50文章审核通过2023-02-0319:17修改了注释2023-05-2520:25修改了$\LaTeX$2023-05-2520:32再次修改了$\LaTeX$,感谢ACRU......
  • 算法学习day04链表part02-24、19、0207、142
    packageSecondBrush.LinkedList.LL1;/***24.两两交换链表中的节点**/publicclassSwapNodesInPairs_24{publicListNodeswapPairs(ListNodehead){ListNodedummyhead=newListNode(-1);dummyhead.next=head;ListNodecur......
  • 【题解】#105. 「USACO1.3」Ski Course Design 题解(2023-07-01更新)
    #105.「USACO1.3」SkiCourseDesign题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-02-0117:20文章完成2023-02-0316:09文章审核通过2023-02-0422:15修改了注释2023-05-1621:44修改了$\LaTeX$2023-07-0115:59修改了代码题目知识点模拟+搜索......