WIKIOI-1264 芳香数

1264 芳香数

1人推荐收藏发题解

 

 

 

题目描述 Description

This question involves calculating the value of aromatic numbers which are a combination of Arabic digits and Roman numerals.

本题是关于计算芳香数数值的问题,芳香数是阿拉伯数字和罗马数字的组合。

An aromatic number is of the form ARARAR...AR, where each A is an Arabic digit, and each R is a Roman numeral. Each pair AR contributes a value described below, and by adding or subtracting these values together we get the value
of the entire aromatic number.

芳香数的格式是ARARAR..ARA,其中A代表阿拉伯数字,R代表罗马数字。每一对AR按照下面的计算方式计算一个值,通过把这些数值加减起来,就得到了整个芳香数的数值。

An Arabic digit A can be 0, 1, 2, 3, 4, 5, 6, 7, 8 or 9. A Roman numeral R is one of the seven letters I, V, X, L, C, D, or M. Each Roman numeral has a base value:

阿拉伯数字是0,1,2..9,罗马数字是I,V,X,L,C,D,M。

Symbol I V X L C D M Base value 1 5 10 50 100 500 1000

符号I V X L C D M的值是1 5 10 50 100 500 1000。

The value of a pair AR is A times the base value of R. Normally, you add up the values of the pairs to get the overall value. However, wherever there are consecutive symbols ARA0R0 with R0 having a strictly bigger base value
than R, the value of pair AR must be subtracted from the total, instead of being added.

一对AR的值计算为A乘以R。一般的,我们把所有的AR的值加起来就得到了芳香数的值。但是如果存在连续的两个数对ARA0R0,其中R0严格大于R的话,则需要减去AR的值,而不是加上。

For example, the number 3M1D2C has the value 3∗1000+1∗500+2∗100 = 3700 and 3X2I4X has the value 3 ∗ 10 − 2 ∗ 1 + 4 ∗ 10 = 68.

举个例子,3M1D2C 的值为3*1000+1*500+2*100=3700,而3X2I4X的值为3*10-2*1+4*10=68

Write a program that computes the values of aromatic numbers.

你的任务是写一个程序来计算一个给定的芳香数的值。

输入描述 Input Description

 The input is a valid aromatic number consisting of between 2 and 20 symbols.

输入是一个合法的芳香数,包含了2-20个字符。

输出描述 Output Description

 The output is the decimal value of the given aromatic number.

输出是一个十进制的整数代表这个芳香数的值。

样例输入 Sample Input

样例输入 1: 3M1D2C

样例输入 2: 2I3I2X9V1X

样例输出 Sample Output

样例输出 1: 3700

样例输出 2: -16

#include<stdio.h>
#include<string.h>
#include<ctype.h>
char a[50];
int b[50];
int c[50];
int Change(char st)
{
    int n;
    switch(st)
    {
       case 'I':n=1;break;
       case 'V':n=5;break;
       case 'X':n=10;break;
       case 'L':n=50;break;
       case 'C':n=100;break;
       case 'D':n=500;break;
       case 'M':n=1000;break;
    }
    return n;
}
int main()
{
   int i,j,n,sum,k,v;
   scanf("%s",a);
   n=strlen(a);k=0;v=0;
   for(i=0;i<n;i++)
   {
       if(isdigit(a[i]))
       b[k++]=a[i]-'0';
       else
       {
         c[v++]=Change(a[i]);
       }
   }
   sum=0;
   for(i=0;i<k;i++)
   {
     if(c[i]<c[i+1]&&i+1<k)
     sum-=b[i]*c[i];
     else
     sum+=b[i]*c[i];
   }
   printf("%d\n",sum);
   return 0;
}
时间: 2024-09-20 00:23:45

WIKIOI-1264 芳香数的相关文章

凌仕芳香之战:重新圈定目标群

文/ 本刊记者 刘晓云 自今年4月以来,"陈老师教室"."凌仕辣妹袭男行动"."把妹圣经"."凌仕神秘组织"等成为人们热议的话题,人气港星陈冠希更是出现在凌仕的创意广告片中,以"陈老师"的身份告诉人们吸引女孩的秘诀,一时之间,一场名为"凌仕效应"的潮流席卷中国.于是,凌仕(LYNX/AXE)这个在欧洲已有27年历史.占据"欧洲男士品牌销量之王"宝座的品牌在中国引起了众

Delphi中取得系统支持的颜色数的方法

在自己的软件中经常需要得知运行本软件的系统支持的颜色数.例如有的软件在16Bits的颜色数的计算机上开发而成,程序的颜色调试得非常漂亮,但是到了一台只支持16色的计算机上,程序变得非常难看.这就需要得到系统的颜色数. Delphi中如何取得系统的颜色数呢?下面的程序就解决这个问题. function GetSysColorNum:Integer; Var ScreenDc:HDC; NumBitsPixel:Integer; begin Result:=0; ScreenDc:=GetDC(0)

PhalGo-参数验证过滤

PhalGo-参数验证过滤 phalGo 的参数过滤使用 beego 提供的独立模块 validation 进行封装改造 , 从而达到可以和 request 一同使用的效果 , 通过统一的报错机制对不匹配的参数进行处理. 连贯操作 当我们自己进行参数验证时,我们需要先获取参数,在判断参数是否存在,判断长度是否在制定范围内,在判断是否符合我们所需要的格式,尤其在Go语言需要花费大量的代码量来实现这一系列功能,但是在PhalGo中进行了良好的封装,对一个参数的基本处理都能在一行内完成,如下所示: n

串口-如何通过android截取收银机的打印数据,组装后上传到后台服务器,然后把数据传到打印机打印小票?

问题描述 如何通过android截取收银机的打印数据,组装后上传到后台服务器,然后把数据传到打印机打印小票? 如题.举个例子,收银机连接打印机实现收银.打印小票,现在想在中间接个硬件Android系统,截取打印数据上传到后台服务器,不对现有收银系统改造,不能影响正常收银. 注:该硬件两端通过串口/并口/usb连接收银机与打印机 解决方案 用小票打印机打印 解决方案二: 这种需要抓包的,安卓不可能.... 解决方案三: 这个你需要截取他的网络包就行了.

sql-关于单表SQL存储过程查询。分页条数,当前页码,总条数的问题

问题描述 关于单表SQL存储过程查询.分页条数,当前页码,总条数的问题 我实现PUB_AREA 表的数据查询, 上面是我写的调试, 指出在下面and处报错,无布尔类型,不知道到底哪里错了- - declare @TotalNum intexec PUB_AREA_SelectAREACITYByHsfSearchss ''101@TotalNum outputselect @TotalNumalter PROCEDURE [dbo].[PUB_AREA_SelectAREACITYByHsfSe

Verilog有符号数运算

在数字电路中,出于应用的需要,我们可以使用无符号数,即包括0及整数的集合:也可以使用有符号数,即包括0和正负数的集合.在更加复杂的系统中,也许这两种类型的数,我们都会用到. 有符号数通常以2的补码形式来表示.图1列出了4位二进制表示法所对应正负数.进一步观察,我们发现两种类型数的加减法是一样的,做加法和减法就是 在数轮上按正时钟转转或按反时钟转.比方说,1001+0100,意味着从1001按照顺时钟方向移动4个位置,其结果为1101.在无符号数类型中,它 代表(+9)+(+4)=+13:而在有符

你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗?

原文:你真的了解:IIS连接数.IIS并发连接数.IIS最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数 吗? IIS连接数   一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫"IIS限制连接数" 这边客户请求的连接内容包括: 1.网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求

我用了共享内存映射,但是,串口来的数写到共享内存里,就是更新不到磁盘文件里去咋办??

问题描述 我用了共享内存映射,但是,串口来的数写到共享内存里,就是更新不到磁盘文件里去咋办?? 共享内存映射,flushviewoffile,更新磁盘文件(那个flushviewoffile 返回都是对的可是文件里就是没有东西) 解决方案 先看i数据是否正确接收了,有没有写入共享内存.

win8中怎么修改鼠标滚轮每次滚动行数

  1.首先,咱们需要返回到win8系统的传统桌面位置,之后,咱们同时按下win8电脑键盘上的win+C快捷键打开电脑的超级按钮,在这个超级按钮中,咱们就可以看到设置选项了,咱们点击这个设置选项.   2.在打开的设置窗口中,咱们依次点击"更改电脑设置"选项--然后点击"电脑和设备"--"鼠标和触摸板",在新打开的窗口中,咱们就可以看到设置滚轮的选项了,我们可以设置滚动一格为一个屏幕,或者自定义滚动一次的行数,至于到底要如何进行设置,大家可以根据