// UVa 344 - Roman Digititis #include <iostream> #include <stdio.h> using namespace std; const int roman_value[6] = { 0, 1, 5, 10, 50, 100 }; const char roman_char[6] = { '0', 'i', 'v', 'x', 'l', 'c' }; int main() { int roman_count[101][6]; // roman 1 roman_count[1][1] = 1; for (int j = 2; j <= 5; j++) roman_count[1][j] = 0; // loop for (int i = 2; i <= 100; i++) { // init for (int j = 1; j <= 5; j++) roman_count[i][j] = 0; // extract decimal digits int c = i / 100; int d = i / 10; int u = i % 10; // break cases if (c == 1) roman_count[i][5] = 1; else { if (d == 9) { roman_count[i][5]++; roman_count[i][3]++; } else if (d == 4) { roman_count[i][4]++; roman_count[i][3]++; } else { roman_count[i][4] += (d / 5); roman_count[i][3] += (d % 5); } if (u == 9) { roman_count[i][3]++; roman_count[i][1]++; } else if (u == 4) { roman_count[i][2]++; roman_count[i][1]++; } else { roman_count[i][2] += (u / 5); roman_count[i][1] += (u % 5); } } // accumulate for (int j = 1; j <= 5; j++) roman_count[i][j] += roman_count[i - 1][j]; } // input int n; while (cin >> n && n) { printf("%d: %d i", n, roman_count[n][1]); for (int j = 2; j <= 5; j++) printf(", %d %c", roman_count[n][j], roman_char[j]); printf("\n"); } return 0; }
Sunday, June 7, 2015
UVa 344 - Roman Digititis
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment