[Swust OJ 666]--初来乍到(题号都这么溜~~,递归,找规律)
题目链接:http://acm.swust.edu.cn/problem/0666/
结束以EOF判断
|
1
10
35
99
400
|
|
1=I
10=X
35=XXXV
99=XCIX
400=CD
|
I:一 V:五 X:十 L:五十 C:一百 D:五百 M:一千
记数方法
(1)相同的数字连写,所表示的数等于这些数字相加得到的数,如: Ⅲ = 3;
(2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
(3)小的数字,(限于Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ = 4;Ⅸ = 9;
(4)在一个数的上面画一条横线,表示这个数增值 1 000 倍,如:Ⅻ = 12 000 。
编辑本段
组数规则
(1)基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
(2)不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。
(3)V 和 X 左边的小数字只能用Ⅰ。
(4)L 和 C 左边的小数字只能用×。
(5)D 和 M 左 边的小数字只能用 C 。
#include<iostream>
using namespace std;
char key[], X[] = " IXCMVLD";//数的五倍用i+4表示
int cnt;
void Rserve(int x){
int i, cur = , k = , lp = ;
while (x > cur){
cur = * cur + ;
k++;
}
for (i = ; i < k; i++, lp *= );
if (x <= * lp - ){
for (i = ; i < x / lp; i++)
key[cnt++] = X[k];
}
else if (x <= * lp - ){
key[cnt++] = X[k];
key[cnt++] = X[k + ];
}
else if (x <= * lp - ){
key[cnt++] = X[k + ];
for (i = ; i < x / lp - ; i++)
key[cnt++] = X[k];
}
else{
key[cnt++] = X[k];
key[cnt++] = X[k + ];
}
if (x%lp) Rserve(x%lp);
}
int main(){
int i, x;
while (cin >> x){
cnt = ;
Rserve(x);
cout << x << '=';
for (i = ; i < cnt; i++)
cout << key[i];
cout << endl;
}
return ;
}
当然了这道题这么溜,直接分析数字的组成方式1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1,与这些数字相关联会发生比如3和4,8和9,之间数字构成有一个本质的变化,具体的看题目的规则吧,然后每一个数字对应一个罗马数字组合递归找就是了具体见下表
| 1000 | 900 | 500 | 400 | 100 | 90 | 50 | 40 | 10 | 9 | 5 | 4 | 1 |
| M | CM | D | CD | C | XC | L | XL | X | IX | V | IV | I |
很溜的代码如下:
#include <iostream>
#include <string>
using namespace std;
int x[] = { , , , , , , , , , , , , };
string L[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
string exchange(int n){
string s;
int i = ;
while (n){
if (n >= x[i]){
n -= x[i];
s += L[i];
}
else
i++;
}
return s;
}
int main(){
int n;
while (cin >> n){
cout << n << '=';
cout << exchange(n) << endl;
}
return ;
}
这个代码ce,不过拿来改造用来玩还是不错的,至少答案全正确
#include <stdio.h>
void main(){
static char *a[][] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"
"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XCC", "", "C", "CC", "CCC",
"CD", "D", "DC", "DCC", "DCCC", "CM" };
int n, t, i, m;
printf("Please enter number:");
scanf("%d", &n);
printf("%d=", n);
for (m = , i = ; m < ; m++, i /= ){
t = (n%i) / (i / );
printf("%s", a[ - m][t]);
}
printf("\n");
}
[Swust OJ 666]--初来乍到(题号都这么溜~~,递归,找规律)的更多相关文章
- 小米 OJ 编程比赛 01 月常规赛_灯_找规律
灯 序号:#125难度:有挑战时间限制:1000ms内存限制:32M 描述 一个屋子有 n 个开关控制着 n 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n-1 盏灯,每次按下这个开关,其对应 ...
- SGU 181 X-Sequence(一题比较水的求模找规律)
E - X-Sequence Time Limit:500MS Memory Limit:4096KB 64bit IO Format:%I64d & %I64u Submit ...
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
- [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)
题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...
- SWUST OJ NBA Finals(0649)
NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128 Descri ...
- eayui grid 每一页的行号都是从1开始
问题背景: easyui 需要显示行号的时候,我们只需要设置 rownumbers: true, 但是 不管是在哪一页,行号都是从1开始,不能连续 我们在分页的 onSelectPage 函数里去执 ...
- 那些10w+的公众号都在写什么?
出于好奇,那些10w+的公众号都写了些什么,于是我写了几个脚本爬取了各行业Top的公众号文章,进行了关键词统计. 抓取数据.分析用到了3中语言:Node.js,Java,Python.废话不多说,直接 ...
- HDU 5703 Desert 水题 找规律
已知有n个单位的水,问有几种方式把这些水喝完,每天至少喝1个单位的水,而且每天喝的水的单位为整数.看上去挺复杂要跑循环,但其实上,列举几种情况之后就会发现是找规律的题了= =都是2的n-1次方,而且这 ...
- HDU 4572 Bottles Arrangement(找规律,仔细读题)
题目 //找规律,123321123321123321…发现这样排列恰好可以错开 // 其中注意题中数据范围: M是行,N是列,3 <= N < 2×M //则猜测:m,m,m-1,m-1 ...
随机推荐
- android--email发送邮件,文本还有附件形式的邮件
1.首先用的jar包为javaemail 下载地址: https://yunpan.cn/cB3kY8WIvcGtU (提取码:e042) 2.工具包 package com.kllayhello.u ...
- 用javascirpt画个太极
偶然看到用代码画太极,感觉很有趣,用JS写了一个 过程很简单,画了张图,应该一看就懂了 代码也很简单,如下,注释很多 function TaiJi(r,canvas){ this.r = r; thi ...
- QQwry
http://blog.runphp.net/archives/156 http://wenku.baidu.com/link?url=yvd3_EpMM66r6H4qkx3oqcaU2JZNAQv_ ...
- php 实现简单的登录
//登录页面: V层前端模板: Administrator@QCEE61NZ66FEX2D /cygdrive/c/wamp/www/thinkphp/Home/Tpl/Login $ ls inde ...
- Hello China操作系统STM32移植指南(三)
移植到STM32的源代码,可从下列链接下载: http://download.csdn.net/detail/hellochina15/7049909 包含两个包:一个是移植前的Hello China ...
- 基于Visual C++2013拆解世界五百强面试题--题12-进制转换
编程实现,把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数. 转换成二进制,直接循环移位依次取每一位,判断1或0然后将相应字符放入字符串缓冲区中. 对于十六进制, ...
- mahout贝叶斯算法开发思路(拓展篇)1
首先说明一点,此篇blog解决的问题是就下面的数据如何应用mahout中的贝叶斯算法?(这个问题是在上篇(...完结篇)blog最后留的问题,如果想直接使用该工具,可以在mahout贝叶斯算法拓展下载 ...
- 2014多校3 Wow! Such Sequence!段树
主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=4893 这个问题还真是纠结啊--好久不写线段树的题了.由于这几天学伸展树.然后认为线段树小case了. ...
- linux下TUN/TAP虚拟网卡的使用
转载:http://wushank.blog.51cto.com/3489095/1306849 tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设 ...
- 11个实用但你可能不知道的Python程序库
目前,网上已有成千上万个Python包,但几乎没有人能够全部知道它们.单单PyPi上就有超过47000个包列表. 现在,越来越多的数据科学家开始使用Python,虽然他们从pandas,scikit- ...