题目内容:
输入一个大写的英文字母,输出空心的字母金字塔。
输入格式:
一个大写英文字母。
输出格式:
一个空心的大写英文字母金字塔,其中第1层的“A”在第1行的第40列,列从1开始计数。
输入样例:
E
输出样例:
A
B B
C C
D D
EEEEEEEEE
题目注意点:
此类“图案”输出题,建议先建个为excel表找出对应关系(仅作个示例),例如:
行号i | 起始空格数量 | 金字塔左侧字母 | 金字塔中间的空格数(或字母数) | 金字塔右侧字母 |
1 | 39 | A | 0 | 无 |
2 | 38 | B | 1 | B |
3 | 37 | C | 3 | C |
4 | 36 | D | 5 | D |
5 | 35 | E | 7 | E |
与行号i的关系 | =40-i | =A'-1+i或=letter-rows+i | 第1行为0;其他行=(i-1)*2-1 | =A'-1+i或=letter-rows+i |
然后找出规律后再写代码。
答题代码:
#include <stdio.h>
int main(){
char letter;
scanf("%c",&letter);
int rows=letter-'A'+1; //金字塔共rows行
const int middle=40; //金字塔中心处于第40列
for (int i = 1; i <= rows; ++i){
for (int j = 0; j < middle-i; ++j){
printf(" ");
}
printf("%c",letter-rows+i);
if (i==1){
printf("\n");
}
if (i>1&&i<rows){ //允许第2行至倒数第2行进入
for (int j = 0; j < 2*(i-1)-1; ++j){
printf(" ");
}
printf("%c\n",letter-rows+i);
}else if(i==rows){
for (int j = 0; j < 2*(i-1); ++j){
printf("%c",letter);
}
}
}
return 0;
}