1 条题解
-
0
自动搬运
来自洛谷,原作者为

sillation
有朋自远方来,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,然后鞭数十,再驱之别院。子曰:“不亦乐乎?”搬运于
2025-08-24 22:58:09,当前版本为作者最后更新于2024-05-18 20:56:55,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路:
根据输出样例我们可以知道 度的盒分形图为一个长宽为 的正方形。
设置递归函数 生成以坐标 为左上角的 度盒分形。
-
递归边界: 若 ,则在 输出 。
-
若 ,则计算 度的盒子的规模 ,分别在左上方,右上方,中间,左下方和右下方 个 度的盒子。
-
对于左上方的 度的盒子,左上角的坐标为 。递归函数为 。
-
对于右上方的 度的盒子, 右上方的坐标为 。递归函数为 。
-
对于中间的 度的盒子,中间的坐标为 。递归函数为 。
-
对于左下方的 度的盒子,左下方的坐标为 。递归函数为 。
-
对于右上方的 度的盒子,右下方的坐标为 。递归函数为 。
代码:
#include<bits/stdc++.h> using namespace std; char mp[730][730]; void f(int n, int x, int y) { //递归边界 if (n == 1) { mp[x][y]='X'; } else { int m = pow(3, n - 2); //递归5个位置 f(n - 1, x, y); f(n-1, x+2*m, y); f(n - 1, x , y + 2 * m); f(n - 1, x + m, y + m); f(n-1,x+2*m,y+2*m); } } int main() { int n ; while (1) { cin >> n; if(n==-1) return 0; int c=pow(3, n - 1); //初始化 memset(mp,' ',sizeof(mp)); f(n, 0, 0); for (int i = 0; i < c; i++) { for(int j=0; j< c; j++) printf("%c",mp[i][j]); cout<<endl; } cout <<'-'<<endl; } return 0; }笔者文风不好,请见谅。
-
- 1
信息
- ID
- 10082
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者