• 【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 }
  • 相关阅读:
    2016年3月至9月随笔
    带大三个hybird app项目的设计管理笔记
    小议新人的培养
    GitHub上整理的一些工具,求补充——转的,先mark了
    AutoMapper(一)——实现数据契约和实体类之间的转换
    GitHub上整理的一些工具
    我最常用的7个Web在线工具
    在线团队协作工具+在线UML工具
    轻量级SaaS在线作图工具(继之前介绍后完整介绍)
    分享自己使用的在线UML画图工具
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3788485.html
Copyright © 2020-2023  润新知