画正方形

题目描述

ADA是个特能折腾的小女孩,她的爸爸有时候想清净一点都不成。最近ADA迷上画图,她爸爸心生一计,让她去画一个正方形,正方形边长n3t次幂 1 <= t <= 7

画图规则如下:

(1)第一个画的正方形其边以大写字母’A’填充,正方形里面不需要填充。

(2)如果规则一画的正方形边长大于3,则将其分成边长为n/39个小正方形,每个小正方形继续画图,如果画的地方如果已经存在字符,则保持不变。如果不存在字符,则一律以大写字母’B’填充。和规则二相同的地方是,只填充边,不填充里面部分。

3)如果规则二得到的9小正方形边长依然大于3,对这9个小正方形重复规则二的动作,只是填充字符一律使用’C ’, 这样能得到81个小正方形. 如果81个小正方形的边长依然不为3, 重复上面类似行为(注意填充字符变成下一个大写字母),直至剖分成的小正方形边长为3.

这个问题对ADA来说显然太难了,但是我想你行的,试一试吧.

输入

第一行是一个整数T,表示有多少组数据。

随后有T,每一行包括一个整数n,代表刚开始画的正方形边长.

输出

每个整数n对应一个正方形输出,正方形中空的位置用空格符号.如果有多组测试数据,相邻两组之间有一空行隔开,注意最后一组后面不要有空行.

样例输入

2
3
27

样例输出

AAA
A A
AAA

AAAAAAAAAAAAAAAAAAAAAAAAAAA
A CC CC BB CC CC BB CC CC A
ACCCCCCCBBCCCCCCCBBCCCCCCCA
ACCCCCCCBBCCCCCCCBBCCCCCCCA
A CC CC BB CC CC BB CC CC A
ACCCCCCCBBCCCCCCCBBCCCCCCCA
ACCCCCCCBBCCCCCCCBBCCCCCCCA
A CC CC BB CC CC BB CC CC A
ABBBBBBBBBBBBBBBBBBBBBBBBBA
ABBBBBBBBBBBBBBBBBBBBBBBBBA
A CC CC BB CC CC BB CC CC A
ACCCCCCCBBCCCCCCCBBCCCCCCCA
ACCCCCCCBBCCCCCCCBBCCCCCCCA
A CC CC BB CC CC BB CC CC A
ACCCCCCCBBCCCCCCCBBCCCCCCCA
ACCCCCCCBBCCCCCCCBBCCCCCCCA
A CC CC BB CC CC BB CC CC A
ABBBBBBBBBBBBBBBBBBBBBBBBBA
ABBBBBBBBBBBBBBBBBBBBBBBBBA
A CC CC BB CC CC BB CC CC A
ACCCCCCCBBCCCCCCCBBCCCCCCCA
ACCCCCCCBBCCCCCCCBBCCCCCCCA
A CC CC BB CC CC BB CC CC A
ACCCCCCCBBCCCCCCCBBCCCCCCCA
ACCCCCCCBBCCCCCCCBBCCCCCCCA
A CC CC BB CC CC BB CC CC A
AAAAAAAAAAAAAAAAAAAAAAAAAAA
 
#include<stdio.h>
char a[2190][2190];
int main()
{
	int n, b,d,f,e,i,j,k;
	char c[] = "ABCDEFG";
	scanf("%d",&n);
	while (n--)
	{
		scanf("%d",&b);  //  输入的边长

		for (i = 0; i <b; i++)
		{
			for (j = 0; j <b; j++)
			{
				a[i][j]=' ';
			}

		}				
			for (i = 0,k=0; i < b; i++)
			{			
				a[0][i] =c[k];			
				a[i][0] = c[k];			
				a[b - 1][i] =c[k];		
				a[i][b - 1] = c[k];
			}

			d = b; e = b; k = 1; f = b / 3;
			
			while (e > 3)
			{	
					for (i = 0; i < b; i++)
					{
						for (j = 0; j < b; j++)
						{
							if (i%f ==0)
							{
								if (a[i][j]==' ')
									a[i][j] = c[k];
								if (a[i - 1][j] == ' ')
								a[i - 1][j] = c[k];
							}
							if (j%f == 0)
							{
								if (a[i][j]==' ')
								a[i][j] = c[k];
								if (a[i][j-1]==' ')
								a[i][j - 1] = c[k];
							}


						}

					}
								
					e = e / 3;  f = f / 3;k++;
			}

		for (i = 0; i < d; i++)
		{
			for (j = 0; j < d;j++)
			{
				printf("%c",a[i][j]);
			}
			printf("\n");

		}
		printf("\n");
		
	}

	return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用turtle库来绘制正方形。下面是一个简单的例子: ``` from turtle import * pencolor('red') # 设置笔颜色为红色 pensize(5) # 设置笔粗细为5像素 for i in range(4): # 循环四次,四条边 fd(100) # 正方形边长100像素 lt(90) # 笔向左转90度 ``` 如果要在布中央正方形,则需要计算笔的起始位置。下面是一个在布中央正方形的例子: ``` from turtle import * pencolor('red') # 设置笔颜色为红色 pensize(5) # 设置笔粗细为5像素 bian = 100 # 设置正方形边长为100 pu() # 抬笔 rt(90) # 右转90度 fd(bian/2) # 向下移动半个边长 lt(90) # 左转90度,笔方向转回向东 pd() # 放下笔开始绘 fd(bian/2) # 先向东移动半个边长(半个底边) for i in range(3): # 循环三次右、上、左三边 lt(90) # 向左转90度 fd(bian) # 正方形边长 lt(90) # 向左转90度准备底边剩下一半 fd(bian/2) # 另外半个底边 ``` 如果要嵌套正方形,则可以在以上情况中加上一个外循环,在第二种方法的基础上内嵌套正方形。下面是一个嵌套正方形的例子: ``` from turtle import * pencolor('red') # 设置笔颜色为红色 pensize(5) # 设置笔粗细为5像素 bian = 100 # 设置正方形边长为100 jiange = 10 # 设置间隔为10像素 pu() # 抬笔 for j in range(4): # j为嵌套层数 rt(90) if j == 0: fd(bian/2) # 第一次循环笔向下走半个边长 else: fd(jiange) # 每次循环向下额外移动jiange长度的距离 lt(90) pd() fd(bian/2+jiange*j) # 加间隔长度 for i in range(3): lt(90) fd(bian+2*j*jiange) # 加二倍间隔 lt(90) fd(bian/2+jiange*j) pu() # 每一个正方形就抬笔 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值