画正方形

                                 

 

                       

目的是抛砖引玉,直接抄骗别人也是骗自己。

#include<stdio.h>
#include<string.h>
#include<math.h>
char r[8]={'A','B','C','D','E','F','G'};
char ada[4000][4000];
int main()
{
int t;
scanf("%d",&t);
for(int q=0;q<t;q++){
int n;
scanf("%d",&n);
int x=n;
for(int o=1;o<x+1;o++)
for(int u=1;u<x+1;u++)
ada[o][u]=' ';
for(int o=1;o<x+1;o++){
ada[o][1]=r[0];
ada[o][x]=r[0];}
for(int o=1;o<x+1;o++){
ada[1][o]=r[0];
ada[x][o]=r[0];}
int pp=1;
int y=x;
int oo=1;
int nn=n;
int kk=0;
while (nn) {
  nn /= 3;
  kk++;
}
kk-=2;
nn = n;
int flg=0;
int nnn=nn;
int zm=1;
while (kk) {
int uu=0;
while(uu<=n){
uu+=pow(3,kk);
for(int o=0;o<x+1;o++){
if(ada[o][uu]==' ')ada[o][uu]=r[zm];
if(ada[o][uu+1]==' ')ada[o][uu+1]=r[zm];}
for(int o=0;o<x+1;o++){
if(ada[uu][o]==' ')ada[uu][o]=r[zm];
if(ada[uu+1][o]==' ')ada[uu+1][o]=r[zm];
}
}
kk--;
zm++;
}
for(int o=1;o<x+1;o++){
for(int u=1;u<x+1;u++)
printf("%c",ada[o][u]);
printf("\n");}
pp=0;
if(q!=t-1)printf("\n");
}
return 0;
}

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

画图规则如下:

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

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

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




 

输入

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

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

输出

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

样例输入 Copy

<span style="background-color:#ffffff"><span style="color:#333333"><span style="color:#333333"><span style="background-color:#f5f5f5">2
3
27
</span></span></span></span>

样例输出 Copy   

<span style="background-color:#ffffff"><span style="color:#333333"><span style="color:#333333"><span style="background-color:#f5f5f5">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</span></span></span></span>
  • 1
    点赞
  • 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、付费专栏及课程。

余额充值