PAT 甲级 1038 Recover the Smallest Number 两种思路

2024-06-19 16:32

本文主要是介绍PAT 甲级 1038 Recover the Smallest Number 两种思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这道题的大致思路是每次把能够让拼接后的数字最小的串放在前面,怎么来比较哪个放在前面最小呢?考虑下面两种情况
情况1:321 32 324
情况2:131 13 134
显然应该把第一位最小的放在最前面,第一位相同比较第二位,如果所有位都相同呢?比如上面32和13的情况?可以循环进行比较。比如判断321和32谁放在前面的时候,比较3和3,2和2,3和1得到结果321更小,所以321放在前面。这个循环比较方法的思路和证明并不直观。需要考虑到前n位相同的时候,拼接串需要保证小的数字更早出现。

#include <bits/stdc++.h>
using namespace std;
// 按位循环比较(这个可行性不是那么直观)
bool cmp(const string& a, const string& b)
{int sz = std::max(a.size(), b.size());for (int i = 0; i < sz; ++i) {if (a[i % a.size()] != b[i % b.size()]) {return a[i % a.size()] < b[i % b.size()];}}return true;
}
int main()
{
#ifdef LOCALfreopen("input.txt", "r", stdin);
#endifint n; cin >> n;vector<string> nums(n);for (int i = 0; i < n; ++i) {cin >> nums[i];}sort(nums.begin(), nums.end(), cmp);string ans = "";for (auto& i : nums) ans += i;// 去除前导0bool fro_zero = true;for (auto& i : ans) {if (fro_zero && i != '0') {fro_zero = false;}if (!fro_zero) cout << i;}// 如果全是0,输出0if (fro_zero) cout << 0;cout << endl;
}

另外一种思路更加自然:
考虑a和b两个串,a+b和b+a分别表示a拼接在前面和b拼接在前面。如果a+b<b+a,那么要让拼接的结果更小,只要把a放在前面就可以了。从而可以贪心:在判断a和b谁放在前面的时候,每次都把x+y<y+x的x放在前面。

#include <bits/stdc++.h>
using namespace std;
// 拼接之后比较
bool cmp(const string& a, const string& b)
{return a + b < b + a;
}
int main()
{
#ifdef LOCALfreopen("input.txt", "r", stdin);
#endifint n;cin >> n;vector<string> nums(n);for (int i = 0; i < n; ++i) {cin >> nums[i];}sort(nums.begin(), nums.end(), cmp);string ans = "";for (auto& i : nums) ans += i;// 去除前导0bool fro_zero = true;for (auto& i : ans) {if (fro_zero && i != '0') {fro_zero = false;}if (!fro_zero) cout << i;}// 如果全是0,输出0if (fro_zero) cout << 0;cout << endl;
}

这篇关于PAT 甲级 1038 Recover the Smallest Number 两种思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075547

相关文章

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

如何打造个性化大学生线上聊天交友系统?Java SpringBoot Vue教程,2025最新设计思路

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

c++11工厂子类实现自注册的两种方法

文章目录 一、产品类构建1. 猫基类与各品种猫子类2.狗基类与各品种狗子类 二、工厂类构建三、客户端使用switch-case实现调用不同工厂子类四、自注册方法一:公开注册函数显式注册五、自注册方法二:构造函数隐形注册总结 一、产品类构建 1. 猫基类与各品种猫子类 class Cat {public:virtual void Printer() = 0;};class