XTU OJ 2022 128题之字母圣诞树

31 篇文章 2 订阅

Description

题目描述

打印一个字母圣诞树。

输入

第一行是一个整数K,表示样例的个数。以后每个样例是一个大写英文字母,占一行。

输出

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

样例输入

5
A
B
C
D
E

样例输出

 A
AAA
  A
 AAA
  B
BBBBB
   A
  AAA
   B
 BBBBB
   C
CCCCCCC
    A
   AAA
    B
  BBBBB
    C
 CCCCCCC
    D
DDDDDDDDD
     A
    AAA
     B
   BBBBB
     C
  CCCCCCC
     D
 DDDDDDDDD
     E
EEEEEEEEEEE

思路分析:不难看出,这题的输出分为奇数行和偶数行,因此我们应该分别处理,奇数行较为简单,而偶数行就需要分析。不妨先对奇数行进行分析,假设存在6行,那么奇数行前面的空格就只有三个即n/2个空格,对于 偶数行,令第一行i=0,则依次到i=5,用j控制空格,k控制字母当i=1时A前面有两个空格,当i=3时B前面有一个空格,当i=5时C前面有零个空格。再根据这个递推关系找到j与n,i之间的关系就可以控制空格的最大数量.之后再看偶数行的字母,容易得到,字母数量为i+2即k<i+3.

#include<stdio.h>
#include <iostream>
using namespace::std;
int main()
{
	int a;
	cin >> a;
	for (int i = 0; i < a; i++)
	{
		//行数确定:
		char ch;
		char ch1 = 'A';
		char ch2;
		cin >> ch;
		int n = (ch - 64) * 2;//确定行数;
		//总体的循环
		for (int i = 0; i < n; i++)
		{
			//对于偶数行
			if (i == 0 || i % 2 == 0)
			{
				for (int j = 0; j < n / 2; j++)//对于空白
				{
					cout << " ";
				}
				ch2 = ch1 + i / 2;
				cout << ch2 << endl;


			}
			//对于奇数行
			if (i == 1 || (i - 1) % 2 == 0)
			{
				for (int j = 0; j < (n - i - 1) / 2; j++)
				{
					cout << " ";
				}
				ch2 = ch1 + (i - 1) / 2;
				for (int k = 0; k < i + 2; k++)//对于字母
				{
					cout << ch2;
				}
				cout << endl;
			}
		}
	}
	
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值