也是一道恶心的题,相比上面那一道一点不会2333.
题号:1465
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | char str[31][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" }; char arr1[8] = "IVXLCDM"; int num[31] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 2000, 3000 }; int a[26]; void _find(int x){ int j = 30; while (num[j] > x)j--; for (; j >= 1; j--){ if (x >= num[j]){ x -= num[j]; for (int i = 0; i < strlen(str[j]); i++){ a[str[j][i] - 'A']++; } } if (x == 0)return; } } int main(){ int n; scanf("%d", &n); for (int i = 1; i <= n; i++){ _find(i); } if (a[int('I') - 65] != 0) printf("I %d\n", a[int('I') - 65]); if (a[int('V') - 65] != 0) printf("V %d\n", a[int('V') - 65]); if (a[int('X') - 65] != 0) printf("X %d\n", a[int('X') - 65]); if (a[int('L') - 65] != 0) printf("L %d\n", a[int('L') - 65]); if (a[int('C') - 65] != 0) printf("C %d\n", a[int('C') - 65]); if (a[int('D') - 65] != 0) printf("D %d\n", a[int('D') - 65]); if (a[int('M') - 65] != 0) printf("M %d\n", a[int('M') - 65]); } |
只有这样才能过……
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<cstdlib> #include<cstring> #include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; char str[31][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" }; char arr[8] = "IVXLCDM"; int num[31] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 2000, 3000 }; int a[26]; void _find(int x){ int j = 30; while (num[j] > x)j--; for (; j >= 1; j--){ if (x >= num[j]){ x -= num[j]; for (int i = 0; i < strlen(str[j]); i++){ a[str[j][i] - 'A']++; } } if (x == 0)return; } } int main(){ int n; cin >> n; for (int i = 1; i <= n; i++){ _find(i); } for (int i = 0; i < 8; i++){ if (a[arr[i] - 'A'] != 0)cout << (char)(arr[i]) << " " << a[arr[i] - 'A'] << endl; } } |
这样莫名其妙多出来一行输出@_500,根本不知道怎么回事……