Date:2019.10.13
Degree of difficulty:Universal+
Original question:T103467 三角形
用递归
== 加强递归==
两次考试经验告诉我,在这种递归问题上还是有些欠缺,所以要加强
AC code
//f(n) 和 f(n-1) 有一定的关系
#include<bits/stdc++.h>
using namespace std;
char a[5000][5000];
void f(int x, int y, int t, int k){
//f表示t阶底的中心位置为x(行),y(列)的三角形的图案 ,k表示底/2的结果
if(t == 1){
a[x][y] = '_';
a[x][y + 1] = '_';
a[x][y - 1] = '/';
a[x][y + 2] = '\\';
a[x - 1][y] = '/';
a[x - 1][y + 1] = '\\';
return ;
} //边界==一个三角形的情况
f(x - k, y, t - 1, k/2);//上层三角形
f(x, y - k, t - 1, k/2);//底层左侧三角形
f(x, y + k, t - 1, k/2);//底层右侧三角形
//大三角形由三个小三角形组成
}
int n;
int main(){
// freopen("triangle.in","r",stdin);
// freopen("triangle.out","w",stdout);
scanf("%d",&n);
memset(a,' ',sizeof a);//先把数组初始化为空格
int p = 1<<n;//位运算==pow(2,n);速度快!!
f(p,p,n,p/2);
for(int i = 1;i <= 2*p; i++){
for(int j = 1; j <= 2*p; j++)
printf("%c",a[i][j]);
printf("\n");
}
return 0;
}
注意事项
- 位运算的写法
int p = 1<<n;//位运算==pow(2,n);速度快!!