跳至正文

USACO 2.2.1 Preface Numbering 解题报告

这题一开始确实会感觉很难,但是罗马数字的个位只有可能是{"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},同理,十位上的数字也永远都是固定的,所以还是简单吧,实现代码如下: / LANG: C ID: yylogoo1 PROG: preface / #include char num[4][10][5] = { {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}, {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}, {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}, {"", "M", "MM", "MMM"}}; int have[7]; void addnum(int n) { int i = 0; char s; while(n){ s = num[i][n % 10]; while(s != '\0'){ switch(*s){ case 'I': have[0]++; break; case 'V': have[1]++; break; case 'X': have[2]++; break; case 'L': have[3]++; break; case 'C': have[4]++; break; case 'D': have[5]++; break; case 'M': have[6]++; break; } s++; } i++; n /= 10; } } char st[7] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'}; int main(void) { int n; int i; freopen("preface.in", "r", stdin); freopen("preface.out", "w", stdout); scanf("%d", &n); for(i = 1; i 0){ printf("%c %d\n", st[i], have[i]); } } return 0; }

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注