zoukankan      html  css  js  c++  java
  • USACO 2.2 序言页码 (MATH)

    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.
    
    
  • 相关阅读:
    Nacos安装部署文档
    mysql安装部署文档
    Postgresql数据库安装部署文档
    Sentinel安装部署文档
    Nginx安装部署手册
    golang 7. defer
    golang 6. 指针 *
    golang 5. import
    golang 4. 函数 func
    golang 3. 常量 const iota
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319559.html
Copyright © 2011-2022 走看看