1 条题解
-
0
自动搬运
来自洛谷,原作者为

aaaaaawsl
即使无天雨,我亦留此地搬运于
2025-08-24 22:32:58,当前版本为作者最后更新于2021-08-04 17:07:11,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
无智商解法
没有高级的算法,没有奇异的思路,枚举才是王道。
本题需要将每一种罗马数字的字符重新排列,输出排列后最小的数字。
注意数据范围 。
枚举 100 个数还在我的承受范围内。然而把 1 至 100 的数全部枚举一遍显然不是我的风格。
观察罗马数字,可以发现除了 40 至 49 ,其他数字中的‘ L ’字符一定在开头。
那么可以将开头的‘ L ’提取出来,剩下的字符按照正常方式判断,在最后将‘ L ’补进去。
以上操作可以使用 string 自带的 substr 操作来执行。但是以‘ L ’字符开头的罗马数字中还有一部分需要特殊判断。
例如:罗马数字 LXI 就可以将‘ X ’字符放在前面,排列成 XLI 。
因此需要对这部分内容特殊判断。枚举最重要的部分就是代码,上代码。
#include <bits/stdc++.h> using namespace std; string opt(string s){ string ss; if(s[0]=='L'){ if(s=="LXI"||s=="LIX") return "XLI"; if(s=="LXII"||s=="LIXI") return "XLII"; if(s=="LXIII") return "XLIII"; if(s=="LXIV"||s=="LXVI") return "XLIV"; if(s=="LXV") return "XLV"; if(s=="LXVII") return "XLVII"; if(s=="LXVIII") return "XLVIII"; if(s=="LXIX"||s=="LXXI") return "XLIX"; //对"LX"的特殊判断 ss="L"; //在返回的时候和'L'字符一起返回(若s的开头不为'L',ss为空,不干扰结果) s=s.substr(1,s.length()-1); //若s不在特殊判断范围内,使用substr函数去掉'L'字符,其余部分按照正常方法判断 } //1至9 if(s=="I"||s=="II"||s=="III"||s=="IV"||s=="V"||s=="VII"||s=="VIII"||s=="IX") return ss+s; if(s=="VI") return ss+"IV"; //10至19 if(s=="X"||s=="XII"||s=="XIII"||s=="XIV"||s=="XV"||s=="XVII"||s=="XVIII"||s=="XIX") return ss+s; if(s=="XI") return ss+"IX"; if(s=="XVI") return ss+"XIV"; //20至29 if(s=="XX"||s=="XXII"||s=="XXIII"||s=="XXIV"||s=="XXV"||s=="XXVII"||s=="XXVIII"||s=="XXIX") return s; if(s=="XXI") return ss+"XIX"; if(s=="XXVI") return ss+"XXIV"; //30至39 if(s=="XXX"||s=="XXXII"||s=="XXXIII"||s=="XXXIV"||s=="XXXV"||s=="XXXVII"||s=="XXXVIII"||s=="XXXIX") return ss+s; if(s=="XXXI") return ss+"XXIX"; if(s=="XXXVI") return ss+"XXXIV"; //40至49 if(s=="XLI"||s=="XLII"||s=="XLIII"||s=="XLIV"||s=="XLV"||s=="XLVII"||s=="XLVIII"||s=="XLIX") return ss+s; if(s=="XLVI") return ss+"XLIV"; //90至100 if(s=="XC"||s=="XCI"||s=="XCII"||s=="XCIII"||s=="XCIV"||s=="XCV"||s=="XCVII"||s=="XCVIII"||s=="XCIX"||s=="C") return ss+s; if(s=="XCVI") return ss+"XCIV"; } //得到排列前得罗马数字,返回排列后的罗马数字 int main(){ string s; cin>>s; cout<<opt(s)<<endl; return 0; }
- 1
信息
- ID
- 7095
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者