待删
关于南蛮图腾递推的问题
原题来源于洛谷:P1498 南蛮图腾 题目链接
每个数据一个数字,表示图腾的大小(此大小非彼大小) n<=10
分析:设置循环以创建图形,每次循环则将宽高乘2,方便下次创建,初始宽为4,高为2。每次创建,实际上就是将原有图形复制两次,放到右边和上边。按照这个思路,就可以递推写代码了。
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long LL;
char draw[3000][3000];
int main()
{
int n,height=2,width=4;;
scanf("%d",&n);
memset(draw,' ',sizeof(draw));
draw[0][0]=draw[1][1]='/'; //创建初始图形(一个小三角形)
draw[3][0]=draw[2][1]='\\';
draw[1][0]=draw[2][0]='_';
int step=0;
while(step++<n){
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
draw[j+width/2][i+height]=draw[j+width][i]=draw[j][i]; //用原有图形向上边和右边复制。
}
}
width*=2;
height*=2;
}
height/=2;
width/=2;
for(int i=height-1;i>=0;i--){
for(int j=0;j<width;j++){
printf("%c",draw[j][i]);
}
puts("");
}
return 0;
}
代码如上,欢迎讨论。