模拟,老老实实地将字符串转化成数字运算,再转换成字符串输出.
对于字符串转数字:
1. ”1”(..#) “4”(#.#) “+”(...) 比较特殊,它们的第一行都是没有别的数与其重复的,可以直接特判;
2. 同理,再将“2” “3” 和 “5” “6” 放在一起判断;
3. 再将"7" "0" 和 "8" "9" 放在一起判断(其实都差不多啦).
对于数字转字符串:
老实一行一行输出,如果是最后一个数字就不输出末尾的 '.' .(如果有更好的方法请赐教,勿喷)
代码如下:
#include<bits/stdc++.h> using namespace std; int n; string s[10]; void print(int x) { string str; while(x) { str.push_back((x % 10) + '0'); x /= 10; } for(int i = str.length() - 1;i >= 0;i--) { switch(str[i] - 48) { case 0 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 2 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 3 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 4 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} case 5 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 6 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 7 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 8 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 9 : {if(i == 0) {printf("###"); break;} printf("###."); break;} } } printf("\n"); for(int i = str.length() - 1;i >= 0;i--) { switch(str[i] - 48) { case 0 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 2 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 3 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 4 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} case 5 : {if(i == 0) {printf("#.."); break;} printf("#..."); break;} case 6 : {if(i == 0) {printf("#.."); break;} printf("#..."); break;} case 7 : {if(i == 0) {printf("#.#"); break;} printf("..#."); break;} case 8 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} case 9 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} } } printf("\n"); for(int i = str.length() - 1;i >= 0;i--) { switch(str[i] - 48) { case 0 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 2 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 3 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 4 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 5 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 6 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 7 : {if(i == 0) {printf("#.#"); break;} printf("..#."); break;} case 8 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 9 : {if(i == 0) {printf("###"); break;} printf("###."); break;} } } printf("\n"); for(int i = str.length() - 1;i >= 0;i--) { switch(str[i] - 48) { case 0 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 2 : {if(i == 0) {printf("#.."); break;} printf("#..."); break;} case 3 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 4 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 5 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 6 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} case 7 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 8 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;} case 9 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} } } printf("\n"); for(int i = str.length() - 1;i >= 0;i--) { switch(str[i] - 48) { case 0 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 2 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 3 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 4 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 5 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 6 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 7 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;} case 8 : {if(i == 0) {printf("###"); break;} printf("###."); break;} case 9 : {if(i == 0) {printf("###"); break;} printf("###."); break;} } } printf("\n\n"); } int main() { scanf("%d",&n); for(int i = 1;i <= n;i++) { int a = 0,t = 0; for(int j = 0;j < 5;j++) cin >> s[j]; for(int j = 0;j < s[0].length();j += 4) { if(s[0][j] == '.' && s[0][j+1] == '.' && s[0][j+2] == '.') { a += t; t = 0; } else if(s[0][j] == '.' && s[0][j+2] == '#') t = (t << 1) + (t << 3) + 1; else if(s[0][j] == '#' && s[0][j+1] == '.' && s[0][j+2] == '#') t = (t << 1) + (t << 3) + 4; else { if(s[1][j] == '.' && s[1][j+2] == '#') { if(s[3][j] == '#') t = (t << 1) + (t << 3) + 2; else if(s[3][j+2] == '#') t = (t << 1) + (t << 3) + 3; } else if(s[1][j] == '#' && s[1][j+2] == '.') { if(s[3][j] == '#') t = (t << 1) + (t << 3) + 6; else t = (t << 1) + (t << 3) + 5; } else if(s[2][j+1] == '.') { if(s[3][j] == '#') t = (t << 1) + (t << 3); else t = (t << 1) + (t << 3) + 7; } else if(s[3][j] == '#') t = (t << 1) + (t << 3) + 8; else t = (t << 1) + (t << 3) + 9; } } a += t; print(a); getchar(); getchar(); } return 0; }