211
社区成员




L2-3 空心字母金字塔
分数 10
作者 翁恺
单位 浙江大学
目录
输入一个大写的英文字母,输出空心的字母金字塔。
一个大写英文字母。
一个空心的大写英文字母金字塔,其中第1层的“A”在第1行的第40列,列从1开始计数。
E
A
B B
C C
D D
EEEEEEEEE
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
1.通过观察输出样例,可以将代码分成三部分;分别为第一行,最后行与中间部分。
2.输出字符由A按字母表顺序逐渐增加至用户输入字母,运用ASCII码对这一过程进行转换。
3.对每行字符前空格数,中间部分空格数进行准确输出,找准各行之间的规律。
#include<stdio.h>
int main()
{
char ch,op='A';//op用于ASCII转换输出字母
int i,j=1,n=40;
scanf("%c",&ch);
//第一部分(对第一行A进行输出)
for(i=1;i<n;i++){
printf(" ");
}
printf("A\n");
n=n-1;
op++;
//第二部分(对中间部分进行输出)
if(ch!='A'){
for(;op<ch;op++){
for(i=1;i<n;i++){//前端空格数输出每行递减1
printf(" ");
}
printf("%c",op);
for(i=1;i<=j;i++){//中部空格数为由1开始的奇数
printf(" ");
}
printf("%c\n",op);
n=n-1;
j=j+2;
}
//第三部分(对末行进行输出)
for(i=1;i<n;i++){
printf(" ");
}
for(i=1;i<=2*(ch-'A')+1;i++){//末尾行字符数为(2*两字符ASCII码的差+1)
printf("%c",ch);
}
}
return 0;
}
将题目要求按部分拆分逐步解决。
如能总结做题时遇到的易错问题和解决方法就更好了