USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
阿拉伯数字转换为罗马数字的规则如下:
1: I
2: II
3: III
4: IV
5: V
6: VI
7: VII
8: VIII
9: IX
10: X
而我们本题可以用到的罗马数字符号有:
I=1
V=5
X=10
L=50
C=100
D=500
M=1000
如果你还不大明白,那我们举两个例子:
3 7 9 = CCC LXX IX
3 4 9 9 = MMM CD XC IX
如果你仍然不明白,那……你去USACO看原题,或者去网上搜罗马数字表示规则吧...orz
本题给出阿拉伯数N,求出1~N所有阿拉伯数分别转换成罗马数之后,所包含的各种字符的个数。
【数据范围】
1<=N<3500
【输入样例】
5
【输出样例】
I 7
V 2
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
就像我题目描述中说的思路,把0~9分别一一对应起来便可以很容易转换了。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
一遍AC。
顺带复习了下运算符重载。有一点失误是,开始本来打算在main里写num+=convert(i)的,可是重载时写成了加法,于是就把main里改成了num=num+convert(i)。
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
1 /* 2 ID: icedrea1 3 PROB: preface 4 LANG: C++ 5 */ 6 7 #include <iostream> 8 #include <fstream> 9 using namespace std; 10 11 struct number 12 { 13 int I,V; // 1,5 14 int X,L; // 10,50 15 int C,D; // 100,500 16 int M; // 1000 17 number(int i=0,int v=0,int x=0,int l=0,int c=0,int d=0,int m=0):I(i),V(v),X(x),L(l),C(c),D(d),M(m) {} 18 friend number operator+(number x,number y) 19 { 20 number r; 21 r.I=x.I+y.I; 22 r.V=x.V+y.V; 23 r.X=x.X+y.X; 24 r.L=x.L+y.L; 25 r.C=x.C+y.C; 26 r.D=x.D+y.D; 27 r.M=x.M+y.M; 28 return r; 29 } 30 friend ostream& operator<<(ostream& out,number x) 31 { 32 if(x.I) out<<"I "<<x.I<<endl; 33 if(x.V) out<<"V "<<x.V<<endl; 34 if(x.X) out<<"X "<<x.X<<endl; 35 if(x.L) out<<"L "<<x.L<<endl; 36 if(x.C) out<<"C "<<x.C<<endl; 37 if(x.D) out<<"D "<<x.D<<endl; 38 if(x.M) out<<"M "<<x.M<<endl; 39 return out; 40 } 41 }num; 42 43 int N; 44 45 number convert(int i) // 由于只需要计数,所以实际上并不需要转换全,例如4和6不用加以区分 46 { 47 number r; 48 int m=i/1000; i%=1000; 49 int c=i/100; i%=100; 50 int x=i/10; i%=10; 51 switch(i) 52 { 53 case 0: break; 54 case 1: r.I=1; break; 55 case 2: r.I=2; break; 56 case 3: r.I=3; break; 57 case 4: r.V=1; r.I=1; break; 58 case 5: r.V=1; break; 59 case 6: r.V=1; r.I=1; break; 60 case 7: r.V=1; r.I=2; break; 61 case 8: r.V=1; r.I=3; break; 62 case 9: r.X=1; r.I=1; break; 63 } 64 switch(x) 65 { 66 case 0: break; 67 case 1: r.X+=1; break; 68 case 2: r.X+=2; break; 69 case 3: r.X+=3; break; 70 case 4: r.L+=1; r.X+=1; break; 71 case 5: r.L+=1; break; 72 case 6: r.L+=1; r.X+=1; break; 73 case 7: r.L+=1; r.X+=2; break; 74 case 8: r.L+=1; r.X+=3; break; 75 case 9: r.C+=1; r.X+=1; break; 76 } 77 switch(c) 78 { 79 case 0: break; 80 case 1: r.C+=1; break; 81 case 2: r.C+=2; break; 82 case 3: r.C+=3; break; 83 case 4: r.D+=1; r.C+=1; break; 84 case 5: r.D+=1; break; 85 case 6: r.D+=1; r.C+=1; break; 86 case 7: r.D+=1; r.C+=2; break; 87 case 8: r.D+=1; r.C+=3; break; 88 case 9: r.M+=1; r.C+=1; break; 89 } 90 r.M+=m; 91 return r; 92 } 93 94 int main() 95 { 96 ifstream in("preface.in"); 97 ofstream out("preface.out"); 98 99 in>>N; 100 for(int i=1;i<=N;++i) num=num+convert(i); 101 out<<num; 102 103 in.close(); 104 out.close(); 105 return 0; 106 }
转载于:https://www.cnblogs.com/icedream61/p/4458008.html
USACO Section2.2 Preface Numbering 解题报告 【icedream61】相关推荐
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告 ---------------------------------------------------------------------------------------- ...
- USACO Section1.3 Combination Lock 解题报告
combo解题报告 -- icedream61 博客园(转载请注明出处) --------------------------------------------------------------- ...
- USACO Section1.5 Superprime Rib 解题报告
sprime解题报告 -- icedream61 博客园(转载请注明出处) -------------------------------------------------------------- ...
- USACO:2.2.1 Preface Numbering 序言页码
USACO:2.2.1 Preface Numbering 序言页码 一.题目描述 ★Preface Numbering 序言页码 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数 ...
- USACO 3.3.2 Shopping Offers解题报告
写在前面:因为之前没写的C++的USACO Training的解题报告太多--所以就不写了,要是想要代码可以联系我:xiedong_1993@foxmail.com 这题就是传说中的五维背包,其实写起 ...
- [USACO 2.2.1] Preface Numbering
[题目描述] Preface Numbering 序言页码 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数值,一下是标准数字表: I 1 L 50 M 1000 V 5 C 10 ...
- usaco Preface Numbering 序言页码
Preface Numbering 序言页码 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数值,一下是标准数字 表: I 1 L 50 M 1000 V 5 C 100 X 10 ...
- USACO Training Section 1.3 Calf Flac 解题报告AC代码
解题报告: 主要方法是生长法,考虑每一位的左右各有多长的回文串,输出最长的那个,比较好想--不过要注意区分字串的奇偶. 其他实现细节看代码里的注释吧-- AC代码: /* ID: yuanmz91 P ...
- 10.30 NFLS-NOIP模拟赛 解题报告
总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...
最新文章
- 干货|深度学习之过拟合和正则化
- nodejs之http-proxy几点常见问题
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
- java设计模式迭代器模式_迭代器模式和Java
- 会做饭的机器人曰记_颜真卿《麻姑仙坛记》:苍劲古朴,体态沉雄,气象宏大...
- Python实现桌面程序:PyQt5 + QtDesigner -- 界面设计与逻辑编写
- 【python游戏开发入门】pygame下载与安装教程
- 《JavaScript 20 年》中文版之语言诞生
- C语言每日一练——第61天:掷骰子游戏
- 使用python做手机app后台
- [转] 下班后的九种最佳放松方法
- 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
- js ---实现排他效果
- 构建信用卡反欺诈预测模型——机器学习
- 从一个故事谈项目管理与团队管理
- 天载股票开户大宗商品价格上涨引关注
- 5个能让你15T硬盘立马爆满的黑科技网站,让你在工作中技高一筹
- Linux驱动学习--HDMI开发(一) 相关协议及传输原理的介绍
- 太原火车站附近的宾馆
- ppt制作流行的“抖音故障风”字体教程