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)。
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
/*
ID: icedrea1
PROB: preface
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; struct number
{
int I,V; // 1,5
int X,L; // 10,50
int C,D; // 100,500
int M; //
number(int i=,int v=,int x=,int l=,int c=,int d=,int m=):I(i),V(v),X(x),L(l),C(c),D(d),M(m) {}
friend number operator+(number x,number y)
{
number r;
r.I=x.I+y.I;
r.V=x.V+y.V;
r.X=x.X+y.X;
r.L=x.L+y.L;
r.C=x.C+y.C;
r.D=x.D+y.D;
r.M=x.M+y.M;
return r;
}
friend ostream& operator<<(ostream& out,number x)
{
if(x.I) out<<"I "<<x.I<<endl;
if(x.V) out<<"V "<<x.V<<endl;
if(x.X) out<<"X "<<x.X<<endl;
if(x.L) out<<"L "<<x.L<<endl;
if(x.C) out<<"C "<<x.C<<endl;
if(x.D) out<<"D "<<x.D<<endl;
if(x.M) out<<"M "<<x.M<<endl;
return out;
}
}num; int N; number convert(int i) // 由于只需要计数,所以实际上并不需要转换全,例如4和6不用加以区分
{
number r;
int m=i/; i%=;
int c=i/; i%=;
int x=i/; i%=;
switch(i)
{
case : break;
case : r.I=; break;
case : r.I=; break;
case : r.I=; break;
case : r.V=; r.I=; break;
case : r.V=; break;
case : r.V=; r.I=; break;
case : r.V=; r.I=; break;
case : r.V=; r.I=; break;
case : r.X=; r.I=; break;
}
switch(x)
{
case : break;
case : r.X+=; break;
case : r.X+=; break;
case : r.X+=; break;
case : r.L+=; r.X+=; break;
case : r.L+=; break;
case : r.L+=; r.X+=; break;
case : r.L+=; r.X+=; break;
case : r.L+=; r.X+=; break;
case : r.C+=; r.X+=; break;
}
switch(c)
{
case : break;
case : r.C+=; break;
case : r.C+=; break;
case : r.C+=; break;
case : r.D+=; r.C+=; break;
case : r.D+=; break;
case : r.D+=; r.C+=; break;
case : r.D+=; r.C+=; break;
case : r.D+=; r.C+=; break;
case : r.M+=; r.C+=; break;
}
r.M+=m;
return r;
} int main()
{
ifstream in("preface.in");
ofstream out("preface.out"); in>>N;
for(int i=;i<=N;++i) num=num+convert(i);
out<<num; in.close();
out.close();
return ;
}
USACO Section2.2 Preface Numbering 解题报告 【icedream61】的更多相关文章
- USACO Section2.1 The Castle 解题报告
castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section2.1 Ordered Fractions 解题报告
frac1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】
holstein解题报告 --------------------------------------------------------------------------------------- ...
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.3 Controlling Companies 解题报告 【icedream61】
concom解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Money Systems 解题报告 【icedream61】
money解题报告------------------------------------------------------------------------------------------- ...
- USACO Section2.3 Zero Sum 解题报告 【icedream61】
zerosum解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】
nocows解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Longest Prefix 解题报告 【icedream61】
prefix解题报告------------------------------------------------------------------------------------------ ...
随机推荐
- 西门子 S7-1500 PLC,使用手轮控制伺服电机
西门子 S7-1500 PLC,使用手轮控制伺服电机 本文描述了一种,1500PLC使用叠加定位的方法,实现手轮操作的方法. 手轮操作需要的功能 数控机床等设备上的电子手轮,起源于机械手轮.机械手轮是 ...
- java线程详细版(未完待续)
1. Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一 ...
- redis网络模型
多路IO复用-非阻塞同步IO模型.见http://www.cnblogs.com/syyong/p/6231326.html 具体结构:http://blog.jobbole.com/100079/ ...
- 软件的依赖关系:类图关系:is-a has-a use-a
基本描述: 类图关系:is-a has-a use-a: 依赖规则: 依赖倒置: 依赖注入: 接口隔离: 无环依赖: 稳定依赖: 依赖倒置描述: 底层抽象-->高层抽象 ^ ^ ...
- E. New Reform_贪心,深搜,广搜。
E. New Reform time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- matlab所需插件
1
- P1290 【欧几里德的游戏】
P1290 [欧几里德的游戏] 真·做题全凭感性 从题目中很容易看出 这是一道\(Gcd\)的题 同时又结合了一些略略的博弈论(丢下锅跑真爽 我们看,辗转相减的\(a,b\)一共只有两种情况 \(a- ...
- git常用命令图解
- Knockout 事件传递参数的方法
在Knockout中直接使用函数传递参数是不行的,会导致函数在初始化时就被调用. 要实现参数的传递,有2种方法: 1.方法一:使用函数包裹 <div data-bind="event: ...
- OpenFire通过User Service管理用户
安装OpenFire服务器略去 1.安装User Service插件: 在管理控制平台找到选项卡“插件”,里边有我们需要安装的一个User Service插件,如果安装过了会显示已经安装的哪些插件,没 ...