CSU2020期中测试模拟题2 问题 B: 字母圣诞树

问题 B: 字母圣诞树

题目描述

打印一个字母圣诞树。

输入

多组样例,第一行为样例的个数,接下来每个样例是一个大写英文字母,占一行。

输出

输出对应的字母圣诞树,每行末尾没有空格,每个圣诞树的最后一行前无空格。

样例输入

3
A
B
C

样例输出

  A
AAA
  A
 AAA
  B
BBBBB
   A
  AAA
   B
 BBBBB
   C
CCCCCCC

这个题目其实一开始能看出来一些端倪
所以通过看题我们可以知道,我们需要的是你输入的那个字母输出时的第二行要顶格,因此通过计算我们可以知道以下内容:

输入A,那么第一行就只有一个空格
输入B,那么第一行就只有两个空格
所以第一行空格数等于你输入的字母的ASCII码减去‘A’的ASCII码

第二行输出的内容也可以根据找规律找出
输入A,无空格
输入B,A一个空格,B无空格
输入C,A两个空格,B一个空格,C无空格…
而且每一个字母输出的第二行的数量时有限的,比如说A—3,B—5,C—7,其实就是减去‘A’对应的ASCII码加上一乘以二再加一
(需要多个for循环来输出,避免出错)
因此,AC代码如下:

#include <stdio.h>
int main(void){
	int n,m,i,j,y;
	//都是为了for循环而定义的字母
	char x;
	while(~scanf("%d",&n)){
		while(n--){
			scanf(" %c",&x);
			//前面带了个空格,防止换行符造成影响
		for(i=0;i<x-'A'+1;i++){
			//这个i其实就是用来控制输出字符('A'+i)
			for(m=0;m<x-'A'+1;m++){
				printf(" ");
		    }//这个地方是用来输出第一行的空格的
		    	printf("%c\n",'A'+i);
		    //这个地方是用来输出第一行的字母的(记得换行)
		    	for(j=0;j<2*(x-'A'+1)+1;j++){
		    	if(j+i+'A'<x)//这个控制条件是j+i+'A'<x(不懂的话可以在评论区讨论一下)
				printf(" ");
				//这个当然负责第二行的空格啦
			}
			    for(y=0;y<2*(i+1)+1;y++)  printf("%c",'A'+i);
			    //其实和上面说的题目解析一致,3,5,7...(输出A的时候i==0;B的时候i==1...
			putchar('\n');
			//记得换行哦,亲
		}
	}
	}
	return 0;
}

仅供参考,不希望同学们拿来完成任务

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值