题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1256
题目解析: 上半部分和下半部分共用一条边 所以设总高度 h, (h+1)/2 + (h+1)%2 是下半部分高度(含公共边) (h+1)/2 是上半部分高度(含公共边)
#include <iostream> using namespace std; int main() { int n, h, i, j; // n case个数 // h 高度 char a; //画笔 cin >> n; while (n--) { cin >> a >> h; for (i = 0; i < h / 6 + 1; i++) printf(" "); //竖线宽度(每增长6而增加1个字符宽) for (i = 0; i < (h - 2) / 2; i++) printf("%c", a); //下半个内径正方形边长 //(h-2)/2 由 (h+1)/2 + (h+1)%2-2 推出 cout << endl; for (j = 0; j < (h - 3) / 2; j++) { for (i = 0; i < h / 6 + 1; i++) printf("%c", a); //竖线宽度(每增长6而增加1个字符宽) for (i = 0; i < (h - 2) / 2; i++) printf(" "); // for (i = 0; i < h / 6 + 1; i++) printf("%c", a); cout << endl; } for (i = 0; i < h / 6 + 1; i++) printf(" "); for (i = 0; i < (h - 2) / 2; i++) printf("%c", a); cout << endl; for (j = 0; j < (h - 2) / 2; j++) { for (i = 0; i < h / 6 + 1; i++) printf("%c", a); for (i = 0; i < (h - 2) / 2; i++) printf(" "); for (i = 0; i < h / 6 + 1; i++) printf("%c", a); cout << endl; } for (i = 0; i < h / 6 + 1; i++) printf(" "); for (i = 0; i < (h - 2) / 2; i++) printf("%c", a); cout << endl; if (n) cout << endl; } return 0; }