题意:
1 打印图形,要求打印2的(n-1)次方层的三角形
n=1的时候,输出
n=2的时候,输出
n=3的时候,输出
解题思路:
1 想来想去没理解和分治有什么关系,只想到了是倍增的思维;
2 很认证研究了半天题解之后发现,原来是分步骤复制的问题,所以叫分治?应该是我没理解透分治,还要多刷题!
3 我用的方法是:打表!
4 设当前是第x层,将x层的图形在 x+1 层复制两份,再回头在x层居中对齐复制一次,具体操作如下图:
当前从第1层复制到第2层:
本来这样============> 第一步:将自己向下复制两份 ========>第二步:向上(原来层)中间对齐复制一份回去
5 也有一些题解是用逆序存放的方法来解决对齐的问题,也是很流弊的~~~
上代码:
#include<bits/stdc++.h>
char s[2000][2000];
int main()
{
int n;
scanf("%d",&n);
memset(s,' ',sizeof(s));
s[1][1]=s[1][4]=' ';
s[1][2]=s[2][1]='/';
s[2][2]=s[2][3]='_';
s[1][3]=s[2][4]='\\';
int h=2,w=4;
for(int i=1;i<n;i++)
{
//先向下:复制两个
for(int x=1;x<=h;x++)
{
for(int y=1;y<=w;y++)
{
s[x+h][y]=s[x+h][y+w]=s[x][y];
s[x][y]=' ';//把原来的位置清空
}
}
//再向上:中间对齐复制回去
for(int x=1;x<=h;x++)
{
for(int y=1;y<=w;y++)
{
s[x][y+w/2]=s[x+h][y];
}
}
h*=2;w*=2;
}
for(int i=1;i<=h;i++)
{
for(int j=1;j<=w;j++)
{
printf("%c",s[i][j]);
}
printf("\n");
}
return 0;
}
版权声明:本文为liusu201601原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。