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】相关推荐

  1. USACO Section2.1 Hamming Codes 解题报告 【icedream61】

    hamming解题报告 ---------------------------------------------------------------------------------------- ...

  2. USACO Section1.3 Combination Lock 解题报告

    combo解题报告 -- icedream61 博客园(转载请注明出处) --------------------------------------------------------------- ...

  3. USACO Section1.5 Superprime Rib 解题报告

    sprime解题报告 -- icedream61 博客园(转载请注明出处) -------------------------------------------------------------- ...

  4. USACO:2.2.1 Preface Numbering 序言页码

    USACO:2.2.1 Preface Numbering 序言页码 一.题目描述 ★Preface Numbering 序言页码 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数 ...

  5. USACO 3.3.2 Shopping Offers解题报告

    写在前面:因为之前没写的C++的USACO Training的解题报告太多--所以就不写了,要是想要代码可以联系我:xiedong_1993@foxmail.com 这题就是传说中的五维背包,其实写起 ...

  6. [USACO 2.2.1] Preface Numbering

    [题目描述] Preface Numbering 序言页码 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数值,一下是标准数字表: I 1 L 50 M 1000 V 5 C 10 ...

  7. usaco Preface Numbering 序言页码

    Preface Numbering 序言页码 一类书的序言是以罗马数字标页码的.传统罗马数字用单个字母表示特定的数值,一下是标准数字 表: I 1 L 50 M 1000 V 5 C 100 X 10 ...

  8. USACO Training Section 1.3 Calf Flac 解题报告AC代码

    解题报告: 主要方法是生长法,考虑每一位的左右各有多长的回文串,输出最长的那个,比较好想--不过要注意区分字串的奇偶. 其他实现细节看代码里的注释吧-- AC代码: /* ID: yuanmz91 P ...

  9. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

最新文章

  1. 干货|深度学习之过拟合和正则化
  2. nodejs之http-proxy几点常见问题
  3. 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
  4. java设计模式迭代器模式_迭代器模式和Java
  5. 会做饭的机器人曰记_颜真卿《麻姑仙坛记》:苍劲古朴,体态沉雄,气象宏大...
  6. Python实现桌面程序:PyQt5 + QtDesigner -- 界面设计与逻辑编写
  7. 【python游戏开发入门】pygame下载与安装教程
  8. 《JavaScript 20 年》中文版之语言诞生
  9. C语言每日一练——第61天:掷骰子游戏
  10. 使用python做手机app后台
  11. [转] 下班后的九种最佳放松方法
  12. 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
  13. js ---实现排他效果
  14. 构建信用卡反欺诈预测模型——机器学习
  15. 从一个故事谈项目管理与团队管理
  16. 天载股票开户大宗商品价格上涨引关注
  17. 5个能让你15T硬盘立马爆满的黑科技网站,让你在工作中技高一筹
  18. Linux驱动学习--HDMI开发(一) 相关协议及传输原理的介绍
  19. 太原火车站附近的宾馆
  20. ppt制作流行的“抖音故障风”字体教程

热门文章

  1. SQLAlchemy schema.MetaData
  2. jinja Extends Blocks Include
  3. VSCode 个性化配置快捷键
  4. TensorFlow tf.keras.losses.MeanSquaredError
  5. TensorFlow tf.keras.layers.conv2D
  6. Java JSP JSTL
  7. 2.6 定位数据不匹配
  8. 爬虫之HTTP基础知识
  9. redis依赖_请勿过度依赖 Redis 的过期监听
  10. 如何快速分析一个行业?