分形POJ2083
思路
题干在这里:POJ2083
我们找一个数组存储图像,然后递归调整即可。因为n<=7,我就先分形求出n=7时的图形,然后读入数据,根据读入在适当地方添加‘\0’,输出,然后再改回空格。
这个题我用pow()结果poj说我编译错误,反正数据很小,我就随便写了个pow()。
ac代码
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char x[1000][1000];
int pow(int a, int b) {
int ans = 1;
for (int i = 1; i <= b; i++)
ans *= a;
return ans;
}
void fractal(int n, int i, int j) {
if (n == 1) {
x[i][j] = 'X';
return;
}
int r = int(pow(3, n - 2));
fractal(n - 1, i, j);
fractal(n - 1, i, j + 2 * r);
fractal(n - 1, i + r, j + r);
fractal(n - 1, i + 2 * r, j);
fractal(n - 1, i + 2 * r, j + 2 * r);
}
int main() {
memset(x, ' ', sizeof(x));
fractal(7,1,1);
while (1) {
int n;
cin >> n;
if (n == -1)
return 0;
for (int i = 1; i <= int(pow(3, n - 1)); i++) {
int p = int(pow(3, n - 1)) +1;
x[i][p] = '\0';
puts(x[i] + 1);
x[i][p] = ' ';
}
cout << '-' << endl;
}
}