zoukankan      html  css  js  c++  java
  • 【HDOJ】1924 CIVIC DILL MIX

    简单字符串。

     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 #define MAXN 55
     5 char srca[MAXN], cas[MAXN], sums[MAXN];
     6 
     7 inline int getVal(char ch) {
     8     switch (ch) {
     9     case 'I': return 1;
    10     case 'V': return 5;
    11     case 'X': return 10;
    12     case 'L': return 50;
    13     case 'C': return 100;
    14     case 'D': return 500;
    15     case 'M': return 1000;
    16     default:  return 0;
    17     }
    18 }
    19 
    20 int R2I(char str[]) {
    21     int i, len = strlen(str);
    22     int val = 0;
    23     for (i=0; i<len; ++i) {
    24         if (str[i]=='C' && (str[i+1]=='D'||str[i+1]=='M'))
    25             val -= 100;
    26         else if (str[i]=='X' && (str[i+1]=='L'||str[i+1]=='C'))
    27             val -= 10;
    28         else if (str[i]=='I' && (str[i+1]=='X'||str[i+1]=='V'))
    29             val -= 1;
    30         else
    31             val += getVal(str[i]);
    32     }
    33     return val;
    34 }
    35 
    36 void f1(int *p, int *q, char str[], int a, int b, char ca, char cb, char cc) {
    37     int x = *p, t=a/9;
    38     int i = *q;
    39     if (x >= a) {
    40         x -= a;
    41         str[i++] = ca;
    42         str[i++] = cc;
    43     }
    44     if (x >= b) {
    45         x -= b;
    46         str[i++] = cb;
    47     }
    48     if (x >= (a-b)) {
    49         x -= (a-b);
    50         str[i++] = ca;
    51         str[i++] = cb;
    52     }
    53     while (x >= t) {
    54         str[i++] = ca;
    55         x -= t;
    56     }
    57     *p = x;
    58     *q = i;
    59 }
    60 
    61 void I2R(int x, char str[]) {
    62     int i = 0;
    63     while (x >= 1000) {
    64         str[i++] = 'M';
    65         x -= 1000;
    66     }
    67     f1(&x, &i, str, 900, 500, 'C', 'D', 'M');
    68     f1(&x, &i, str, 90, 50, 'X', 'L', 'C');
    69     f1(&x, &i, str, 9, 5, 'I', 'V', 'X');
    70     str[i] = '';
    71 }
    72 
    73 int main() {
    74     int c;
    75     int n, case_n = 1;
    76 
    77     while(scanf("%d", &n)!=EOF && n) {
    78         c = 0;
    79         while (n--) {
    80             scanf("%s", srca);
    81             c += R2I(srca);
    82         }
    83         I2R(case_n, cas);
    84         I2R(c, sums);
    85         printf("Case %s: %s
    ", cas, sums);
    86         ++case_n;
    87     }
    88 
    89     return 0;
    90 }
  • 相关阅读:
    读书笔记-js
    读书笔记-设计模式
    读书笔记-并发和多线程
    读书笔记-泛型有限通配符
    读书笔记-类和类加载器
    项目: 推送水木文章到Kindle
    项目:DoubleFaceCamera
    项目:BluetoothChat
    项目:简单记事本
    项目: 连连看
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3788485.html
Copyright © 2011-2022 走看看