Description
一类书的序言是以罗马数字标页码的。传统罗马数字用单个字母表示特定的数值,一下是标准数字表:
I 1 L 50 M 1000
V 5 C 100
X 10 D 500
最多3个可以表示为10n的数字(I,X,C,M)可以连续放在一起,表示它们的和:
III=3
CCC=300
可表示为5x10n的字符(V,L,D)从不连续出现。
除了下一个规则,一般来说,字符以递减的顺序接连出现:
CCLXVIII = 100+100+50+10+5+1+1+1 = 268
有时,一个可表示为10^n的数出现在一个比它大的数前(I在V或X前面,X在L或C前面,等等)。在这种情况下,数值等于后面的那个数减去前面的那个数:
IV = 4
IX = 9
XL = 40
像XD, IC, 和XM这样的表达是非法的,因为前面的数比后面的数小太多。对于XD(490的错误表达),可以写成 CDXC; 对于IC(99的错误表达),可以写成XCIX; 对于XM(990的错误表达),可以写成CMXC。
给定N(1 <= N < 3,500), 序言的页码数,请统计在第1页到第N也中,有几个I出现,几个V出现,等等 (从小到大的顺序)。不要输出并没有出现过的字符。
比如N = 5, 那么页码数为: I, II, III, IV, V. 总共有7个I出现,2个V出现。
Input
一个整数N。
Output
每行一个字符和一个数字k,表示这个字符出现了k次。字符必须按数字表中的递增顺序输出。
题解
暴力出正解。
Executing...
Test 1: TEST OK [0.000 secs, 340 KB]
Test 2: TEST OK [0.000 secs, 340 KB]
Test 3: TEST OK [0.000 secs, 340 KB]
Test 4: TEST OK [0.000 secs, 340 KB]
Test 5: TEST OK [0.000 secs, 340 KB]
Test 6: TEST OK [0.000 secs, 340 KB]
Test 7: TEST OK [0.000 secs, 340 KB]
Test 8: TEST OK [0.000 secs, 340 KB]
All tests OK.
代码
{
ID: zyx52yzl
LANG: PASCAL
TASK: preface
}
var
i,v,x,l,c,d,m,n,k:longint;
procedure print;
begin
if i<>0 then writeln('I ',i);
if v<>0 then writeln('V ',v);
if x<>0 then writeln('X ',x);
if l<>0 then writeln('L ',l);
if c<>0 then writeln('C ',c);
if d<>0 then writeln('D ',d);
if m<>0 then writeln('M ',m);
end;
procedure main;
var
ii:longint;
begin
for ii:=1 to n do
begin
k:=ii;
while k>0 do
case k of
1..3:begin i:=i+1; k:=k-1; end;
4:begin k:=k-4; i:=i+1; v:=v+1; end;
5..8:begin k:=k-5; v:=v+1; end;
9:begin k:=k-9; i:=i+1; x:=x+1; end;
10..39:begin k:=k-10; x:=x+1; end;
40..49:begin k:=k-40; l:=l+1; x:=x+1; end;
50..89:begin k:=k-50; l:=l+1; end;
90..99:begin k:=k-90; x:=x+1; c:=c+1; end;
100..399:begin k:=k-100; c:=c+1; end;
400..499:begin k:=k-400; d:=d+1; c:=c+1; end;
500..899:begin k:=k-500; d:=d+1; end;
900..999:begin k:=k-900; m:=m+1; c:=c+1; end;
else begin k:=k-1000; m:=m+1; end;
end;
end;
end;
begin
assign(input,'preface.in');
assign(output,'preface.out');
reset(input);
rewrite(output);
readln(n);
main;
print;
close(input);
close(output);
end.