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

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

时间:2023-08-18 19:45:46浏览次数:49  
标签:12 return 07 int 题解 Part 2023 字符串

#119. 最大整数 题解

本文章的访问次数为

Part 1 提示

  • 题目传送门
  • 欢迎大家指出错误并私信这个蒟蒻
  • 欢迎大家在下方评论区写出自己的疑问(记得 @ 这个蒟蒻)
  • 本文已同步至学校网站博客园

Part 2 背景

本来是不想写这篇题解的,但是由于卡了这个蒟蒻 \(1\) 整天,故此纪念。

Part 3 更新日志

  • 2023-05-26 17:20 文章完成
  • 2023-02-01 17:20 文章同步至学校网站
  • 2023-05-27 18:59 提交审核
  • 2023-05-30 15:22 文章审核通过
  • 2023-07-01 16:04 修改了代码
  • 2023-08-15 21:13 更新了代码格式,使代码看起来更美观
  • 2023-08-18 19:39 更改了文章格式,使文章看起来更加美观
  • 2023-08-18 19:40 文章同步至博客园

Part 4 题目知识点

字符串+贪心

Part 5 题意说明

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

Part 6 问题分析

拿到这道题,首先自然会想到大的字符串应该排在前面,因为如果 \(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\) 。按这一定义将所有的数字字符串从大到小排序后连接起来所得到的数字字符串即是这个问题的解。排序时先将所有字符串中的最大值选出来存在数组的第一个元素中,再从第二到最后的一个元素中最大的字符串选出来存在第二个元素中,直到最后的两个元素中选出最大的字符串存在数组的倒数第二个元素为止。

Part 7 代码

// #119. 最大整数
// code by:st20250113
#include <bits/stdc++.h>

using namespace std;

struct num
{
	int a, b;
}c[21];

int n;

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()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &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++)
	{
		printf("%d", c[i].a);
	}
	return 0;
}

标签:12,return,07,int,题解,Part,2023,字符串
From: https://www.cnblogs.com/szyawa/p/17641461.html

相关文章

  • CF1575G GCD Festival 题解
    题意给定一个长度为\(n\)的正整数数列\(a\),求\[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\gcd\left(a_i,a_j\right)\times\gcd\left(i,j\right)\](\(1\len,a_i\le10^5\))。题解根据欧拉函数的性质,可以得出\[n=\sum\limits_{d\midn}\varphi(d)\]该......
  • iwebsec-sql注入 07 空格过滤
    01、题目分析空格过滤就是将用户输入的空格过滤掉,众所周知,sql注入语句中会有很多的sql注入语句,如果进行了空格过滤,那么sql注入语句会因为参数连接在一快导致不能正常注入02、手工注入既然是数字型注入,那么对sql注入语句中的空格用其他内容替换即可,可以使用/**/、()、%0a等等,我这......
  • [AT_ABC106_C]题解(C++)
    PartIPreface原题目\(\text{(Luogu)}\)原题目\(\text{(AtCoder)}\)PartIISketch给定一个字符串\(s\)以及一个整数\(k\)。该字符串为纯数字串。其中的数字\(x\)会在\(k\)天后变为\(x^{k-1}\)个\(x\)。求出\(10^{15}\)天后,串\(s\)的第\(k\)位是什么......
  • [AT_ABC106_D]题解(C++)
    PartIPreface原题目\(\text{(Luogu)}\)原题目\(\text{(AtCoder)}\)PartIISketch给定正整数\(n,m,q\)。接下来给定\(m\)组\(x_i,y_i\),表示一列列车的起始站和终点站。在接下来给定\(q\)组\(l_i,r_i\)。对于每组询问,回答有多少\(x_i\geql_i\operatorna......
  • [AT_ABC106_B]题解(C++)
    PartIPreface原题目\(\text{(Luogu)}\)原题目\(\text{(AtCoder)}\)PartIISketch给定一个正整数\(N\)。求出\(1\simN\)所有因数个数为\(8\)的数的个数。PartIIIAnalysis先输入\(N\)。遍历\(1\simN\)的每个数,记录每个数的因数个数。若因数个数等于\(8\)......
  • [AT_ABC106_A]题解(C++)
    PartIPreface原题目$\text{(Luogu)}$原题目$\text{(AtCoder)}$PartIISketch给定整数$a,b$,输出$(a-1)\times(b-1)$。$2\leqa,b\leq100$。PartIIIAnalysis运用小学知识,进行平移,把几块地拼接在一起。不难看出长为$a-1$,宽为$b-1$,面积为$(a-1)\tim......
  • P1012 [NOIP1998 提高组] 拼数
     题解:这道题最大的坑:32和321,32321>32132 1#include<bits/stdc++.h>2usingnamespacestd;3stringa[25];4boolcmp(conststring&a,conststring&b)5{6return(a+b>b+a);//这里太妙了7}8intmain()9{10int......
  • 字符设备驱动-12.misc杂项字符设备驱动
    1引入miscdevice1.1传统cdev方式char_drv.c#include<linux/module.h>#include<linux/kernel.h>#include<linux/types.h>#include<linux/fs.h>#include<linux/init.h>#include<linux/delay.h>#include<asm/uaccess.h>......
  • burpsuite靶场----SQL注入12----oracle的布尔盲注
    burpsuite靶场----SQL注入12----oracle的布尔盲注靶场地址https://portswigger.net/web-security/sql-injection/blind/lab-conditional-errors正式开始1.找到注入点为cookie中的TrackingId2.因为oracle使用||进行连接的所以先判断闭合payload:TrackingId=7zHLwisTii2Zhhp......
  • ASEMI逆变器专用整流桥GBU812参数,GBU812规格
    编辑-ZGBU812参数描述:型号:GBU812最大峰值反向电压(VRRM):1200V平均整流正向电流(IF):8A正向浪涌电流(IFSM):200A工作接点温度和储存温度(TJ,Tstg):-55to+150℃最大热阻(RθJC):2.2℃/W正向电压(VF):1.1V最大瞬时反向电流(IR):5uA热容值i2t:166A2S绝缘耐压Visol:2500V  ......