当前位置: 代码迷 >> 综合 >> 2020年7月17日icpc集训C题:Fractal
  详细解决方案

2020年7月17日icpc集训C题:Fractal

热度:24   发布时间:2024-01-13 17:03:43.0

分形:是物体在数量上,内容上"自相似"的一种数学抽象;
(大概理解下就是部分跟整体相似,不断套娃)
本题是对递归的应用

这道题注意两点:
(一)递归边界:n=1时,只在对应坐标点一个X;
(二)分形模式:左上右上中间右上右下一定是对于当前坐标而言的,因此写递归的时候要记得加上x或者y

#include<cstdio>
#include<iostream>
#include<cmath>
#define M 729
//3的6次方
using namespace std;
char pic[M][M];
void savepic(int n, int x, int y) {
    //存储n度的图int K = (int)pow((double)3,n-2);//n-1?if (n == 1) {
    pic[x][y]='X';return;}savepic(n - 1 ,x  ,y);//左上savepic(n - 1, x ,y+K*2);//右上savepic(n - 1, x+K, y+K);//中savepic(n - 1, x+K * 2, y);//左下savepic(n - 1, x+K * 2, y+K*2);//右下//一定是(x+,y+)的形式,//一开始错写成savepic(n - 1, K, K);//中
}
void printpic(int n) {
    int K = (int)pow((double)3, n - 1);for (int i = 0 ; i < K; i++) {
    for (int j = 0; j < K; j++) {
    putchar(pic[i][j]);}puts("");}
}
int main() {
    //printf("%.0lf",pow(3,6));//测试下3的6此方=729int n;while (cin >> n) {
    memset(pic, 32, sizeof(pic));if (n == -1)break;savepic(n, 0, 0);printpic(n);printf("-\n");}return 0;}
  相关解决方案