2 条题解
-
0
题解
问题描述:生成一个边长为 (3^{n-1}) 的分形三角形图案,其中三角形的顶点及中心位置为'X',其余位置为空格。
思路分析:采用递归(深度优先搜索)方法构建分形结构。当 (n=1) 时,仅在中心位置放置一个'X';当 (n>1) 时,将当前三角形分为5个更小的三角形(四个角和中心),每个小三角形递归生成。
代码解析:
- 数组
d存储不同层级的三角形边长,d[i] = 3^(i-1),因此边长为d[n] = 3^(n-1)。 dfs函数通过递归生成'X'的位置:当n=1时,在(x,y)处放置'X';当n>1时,递归生成5个小三角形的'X'位置,具体坐标由当前大三角形位置和边长决定。- 主函数读取输入
n,初始化数组,调用dfs(1,1,n)生成图案,最后按行打印网格,空格表示未放置'X'的位置。
#include<bits/stdc++.h> using namespace std; const int N=27*27*3+1; char s[N][N]; int d[9]; void dfs(int x, int y, int n) { if(n==1){s[x][y]='X';return ;} dfs(x, y, n-1); dfs(x, y+2*d[n-1], n-1); dfs(x+d[n-1], y+d[n-1], n-1); dfs(x+2*d[n-1], y, n-1); dfs(x+2*d[n-1], y+2*d[n-1], n-1); } int main() { int n;scanf("%d",&n); memset(s,0,sizeof(s)); d[1]=1;for(int i=2;i<=8;i++) d[i]=d[i-1]*3; dfs(1,1,n); for(int i=1;i<=d[n];i++) { for(int j=1;j<=d[n];j++)if(s[i][j]==0) printf(" ");else printf("%c",s[i][j]); printf("\n"); } return 0; } - 数组
-
0
#include<bits/stdc++.h> using namespace std; const int N=27*27*3+1; char s[N][N]; int d[9]; void dfs(int x,int y,int n) { if(n==1){s[x][y]='X';return ;} dfs(x,y,n-1); dfs(x,y+2*d[n-1],n-1); dfs(x+d[n-1],y+d[n-1],n-1); dfs(x+2*d[n-1],y,n-1); dfs(x+2*d[n-1],y+2*d[n-1],n-1); } int main() { int n;scanf("%d",&n); memset(s,0,sizeof(s)); d[1]=1;for(int i=2;i<=8;i++) d[i]=d[i-1]*3; dfs(1,1,n); for(int i=1;i<=d[n];i++) { for(int j=1;j<=d[n];j++)if(s[i][j]==0) printf(" ");else printf("%c",s[i][j]); printf("\n"); } return 0; }
- 1
信息
- ID
- 527
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 80
- 已通过
- 31
- 上传者