USACO代码解析Preface Numbering (preface).docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
描述一类书的序言是以罗马数字标页码的。传统罗马数字用单个字母表示特定的数值,以下是标准数字表:I 1 V 5 X 10 L 50 C 100 D 500 M 1000 最多3个同样的可以表示为10n的数字(I,X,C,M)可以连续放在一起,表示它们的和:III=3CCC=300可表示为5x10n的字符(V,L,D)从不连续出现。除了下一个规则,一般来说,字符以递减的顺序接连出现:CCLXVIII = 100+100+50+10+5+1+1+1 = 268有时,一个可表示为10n的数出现在一个比它大1级或2级的数前(I在V或X前面,X在L或C前面,等等)。在这种情况下,数值等于后面的那个数减去前面的那个数:IV = 4IX = 9XL = 40一个数用罗马数字来表示有且仅有一种而且不能复合嵌套使用(比如I是1 X是10 有人可能要说 IXL就能表示50-10-1 但是IXL绝对不能用来表达39 )(那么39用什么来表示呢 XXXIX是唯一而且正确的选择- -)像XD, IC, 和XM这样的表达是非法的,因为前面的数比后面的数小太多。对于XD(490的错误表达),可以写成 CDXC; 对于IC(99的错误表达),可以写成XCIX; 对于XM(990的错误表达),可以写成CMXC。 90 写成 XC 而不是 LXL, 因为 L 后面的 X 意味着后继标记是 X 或者更小 (不管怎样,可能吧)(等同于阿拉伯数字每位数字分别表示)。给定N(1 = N 3,500),序言的页码数,请统计在第1页到第N页中,有几个I出现,几个V出现,等等 (从小到大的顺序)。不要输出没有出现过的字符。比如N = 5, 那么页码数为: I, II, III, IV, V. 总共有7个I出现,2个V出现。[编辑]格式PROGRAM NAME: prefaceINPUT FORMAT:(preface.in)一个整数N。OUTPUT FORMAT:(preface.out)每行一个字符和一个数字k,表示这个字符出现了k次。字符必须按数字表中的递增顺序输出。[编辑]SAMPLE INPUT5[编辑]SAMPLE OUTPUTI 7V 2任意一个数对应的罗马数字,都可以用其他几个n×10^k表示,比如999=900+90+9=CM+XC+IX;所以我们预先处理出1~9,10~90,100~900,1000~3000这几个数所对应的字符,我们应该制造一个数字表:constshu:array[1..4,0..9] of string=((,I,II,III,IV,V,VI,VII,VIII,IX),//个 (,X,XX,XXX,XL,L,LX,LXX,LXXX,XC),//十 (,C,CC,CCC,CD,D,DC,DCC,DCCC,CM),//百 (,M,MM,MMM,,,,,,));//千#include iostream#include cstdiousing namespace std;//0123456//IVXLCDMint res[7];int a[10][7],b[10][7],c[10][7],d[10][7];//个位,十位,百位,千位。int main(){/*1~910~90100~9001000~3000*/freopen(preface.in, r, stdin);freopen(preface.out, w, stdout);//个位为1,则I(0)出现1次;为2则I两次。。。//I II IIIIIIIa[1][0] = a[6][0] = 1;a[2][0] =a[7][0] = 2;a[3][0] =a[8][0] = 3; a[4][0] =a[9][0] = 1;// IV VVI VII VIII IXfor(inti = 4; i = 8; i++) a[i][1] = 1; a[9][2]=1;//十位://X XX XXX XL L LX LXX LXXX XCb[1][2] = b[6][2] = 1;b[2][2] =b[7][2] = 2;b[3][2] =b[8][2] = 3; b[4][2] =b[9][2] = 1;for(inti = 4; i = 8; i++) b[i][3] = 1; b[9][4]=1;//C CC CCC CD D DC DCC DCCC CMc[1][4] = c[6][4] = 1;c[2][4] =c[7][4] = 2;c[3][4] =c[8][4] = 3; c[4][

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档