输入一个大写的英文字母,输出空心的字母金字塔。
输入格式:
一个大写英文字母。
输出格式:
一个空心的大写英文字母金字塔,其中第1层的“A”在第1行的第40列,列从1开始计数。
输入样例:
E
输出样例:
A
B B
C C
D D
EEEEEEEEE
我的代码:
#include <stdio.h>
int main()
{
char c;
int i,j;
scanf("%c",&c);
for(i=39;i>0;i--){
printf(" ");
}
printf("A\n");
int b=c;
// printf("%d",b);
if(b>65){
for(i=1;i<=b-65;i++){
for(j=39-i;j>0;j--){
printf(" ");
}
printf("%c",65+i);
for(j=i*2-1;j>0;j--){
if(i==b-65){
printf("%c",b);
}else{
printf(" ");
}
}
printf("%c\n",65+i);
}
}
return 0;
}
我觉得一个很有趣的地方是,当输入一个字符scanf(“%c”,&c),然后要获得这个字符的ASCII码时,只要 int b=c,就能获得。
思路:A比较特殊,不管输入那个字母,都会有A。就是A一定存在,所有单独拎出来了,不参与循环。
(以输入E为例)
第二部分是B~E部分,不包含顶。按照顺序写就行:①所在行(最外层循环)——>②每行的空格循环——>③输出第一个字符——>④中间的空格,数量会和所在行数有关系。我让B为第i=1行,中间的空格数就是i*2-1。——>⑤输出第二个字符并换行。
这时候就会发现,在底层E所在位置,中间的空格应该被替换为字符,所有就写一个判断在第②步,就搞定啦