http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3504
C代表有几个字母,每一行输入的16进制是每个字母的显示,每个字母有7行5列,每一行输入的5个16进制数,每个二进制数对应显示的每一列,取每个16进制数的二进制表示的后7位,如果该位为1,则显示'#',否则显示为空格。
比如第一个case的第一列7F 08 08 08 7F是字母H的显示,H有7行5列,7F的二进制表示为01111111,后面7位为1,则相应的字母显示的第一列显示为'#######'。
注意,每行有6C*1个字符,是字母之间要用空格分隔。
#include <iostream> #include <cmath> #include <cstdlib> using namespace std; const int ROW = 80; const int COLUMN = 5; char way[7][ROW * 5]; int get(char hex[]){ int first = hex[0] <= '9' && hex[0] >= '0' ? hex[0] - '0' : 10 + (hex[0] - 'A'); int second = hex[1] <= '9' && hex[1] >= '0' ? hex[1] - '0' : 10 + (hex[1] - 'A'); return first * 16 + second; } int main(){ int cas; cin >> cas; int row; for(int t = 0; t < cas ; t++){ cin >> row; char hex[3]; memset(way, ' ', sizeof(way)); for(int i = 0; i < row; i++){ for(int j = 0; j < COLUMN; j++){ cin >> hex; int n = get(hex); for(int k = 0; k < 7; k++){ int s = n % 2; n = n >> 1; if(s == 1){ way[k][i * COLUMN + j] = '#'; } } } } cout << "Case " << t + 1 <<":" << endl << endl; for(int i = 0; i < 7; i++){ for(int j = 0; j < row * 5; j++){ if(j % 5 == 0 && j != 0) cout << " " ; cout << way[i][j]; } cout << endl; } cout << endl; } }