//规律就是以最小图腾为基本单位,
//先向右复制一个,再向上复制一个
//比如第一个就是这样组成一个小三角形,第二个就是这样组成了一个大三角形
/*
第一个图形倒着存入
/\ /__\
/__\ /\
*/
#include<cstdio>
#include<iostream>
#include<cstring>
const int max1=1026;
const int max2=2050;
using namespace std;
char pic[max1][max2];//图腾数组 ,算了一下最大是1024 2048 ,用全局变量
int main()
{
int n;//题目中给的n代表图腾大小
scanf("%d",&n);
memset(pic,' ',sizeof(pic));//这一句一定要加,不然会爆0
pic[0][0]=pic[1][1]='/';//代表0行0列,1行1列
pic[0][1]=pic[0][2]='_';//代表0行1列,0行两列
pic[0][3]=pic[1][2]='\\';//转义字符
//发现每次向右复制一次,向上复制一次即可,这算一次,
//n为2的时候,这个周期进行一次,n为3的时候这个周期进行2次 ,n-1次
int wide=4;//初始宽度为4,初始高度为它的一半
for(int k=1;k<=n-1;k++)//复制n-1次
{
for(int i=0;i<wide/2;i++)//高度
{
for(int j=0;j<wide;j++)//宽度
{
pic[i][j+wide]=pic[i][j];//向右复制
pic[i+(wide/2)][j+(wide/2)]=pic[i][j];//向下复制,因为要倒序输出
//cout<<pic[i][j];
}
//printf("\n");
}
wide*=2;//每次扩大两倍
}
for(int i=(wide/2)-1;i>=0;i--)//高度
{
for(int j=0;j<wide;j++)
cout<<pic[i][j];
printf("\n");
}
return 0;
}
/*
4
/__\
/\
/__\/__\
/\ /\
/__\
/\
上面的图形其实不用管,因为这是三个for循环中第一个for循环
接下来就是复制三次然后倒过来
/__\/__\/__\/__\
/\ /\ /\ /\
/__\ /__\
/\ /\
/__\/__\
/\ /\
/__\
/\
4
/\
/__\
/\ /\
/__\/__\
/\ /\
/__\ /__\
/\ /\ /\ /\
/__\/__\/__\/__\
/\ /\
/__\ /__\
/\ /\ /\ /\
/__\/__\ /__\/__\
/\ /\ /\ /\
/__\ /__\ /__\ /__\
/\ /\ /\ /\ /\ /\ /\ /\
/__\/__\/__\/__\/__\/__\/__\/__\
*/
p1498南蛮图腾 谢尔宾斯基三角形 分形
最新推荐文章于 2023-01-03 13:00:46 发布