分形POJ2083

分形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;
	}
}
发布了24 篇原创文章 · 获赞 0 · 访问量 357

猜你喜欢

转载自blog.csdn.net/qq_45616764/article/details/104189037