题目在这个网址2083 -- Fractal (poj.org)
是poj上的2083号题
在自己电脑上的vs编译通过且正确,但是放在poj上提交时就显示编译错误
#include
#include
using namespace std;
int fx[10010][10010] = { 0 };
//分形。图形放在fx[a][a],即前a行前a列
void fen(int j, int a) { //i为第几次分形,a为需要分形的总次数
int n = pow(3, j - 2); //n为本次分形被分形的分形行列数
int m = (pow(3, a - 1) + 1) / 2; //m为最中间的下标
if (j == 1) { //第一次分形时在正中间放1
fx[m][m] = 1;
}
else {
int h = m - n / 2;
for (int o = 0; o < n; o++) { //行移动数
for (int p = 0; p < n; p++) { //列移动数
fx[m + o - n - n / 2][m + p - n - n / 2] = fx[h + o][h + p]; //左上角分形填充
fx[m + o - n - n / 2][m + p + n / 2 + 1] = fx[h + o][h + p]; //右上角分形填充
fx[m + o + n / 2 + 1][m + p - n - n / 2] = fx[h + o][h + p]; //左下角分形填充
fx[m + o + n / 2 + 1][m + p + n / 2 + 1] = fx[h + o][h + p]; //右下角分形填充
}
}
}
}
int main() {
int d[10010] = { 0 };
cin >> d[0];
for (int i = 0; d[i] != -1; ) { //保存输入的数据
i++;
cin >> d[i];
}
for (int i = 0; d[i] != -1; i++) { //-1退出分形
int a = d[i];
for (int j = 1; j <= a; j++) {
fen(j, a);
}
for (int m = 1; m <= pow(3, a - 1); m++) {//输出
for (int n = 1; n <= pow(3, a - 1); n++) {
if (fx[m][n] == 1) {
cout << 'X' << " ";
}
else {
cout << " ";
}
fx[m][n] = 0; //输出后顺便清空归零
}
cout << endl;
}
cout << endl << '-' << endl << endl;
}
return 0;
}
这是在poj上的截图
网上搜的,不知道对不对
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
int n, W, cnt;
char s[1001][1001];
void b(int d, int x, int y){
if(d==1)s[y][x]='X';
else {
int size = 1;
for(int i=2;i<d;i++)size*=3;
b(d-1,x,y);//左上
b(d-1,x+2*size,y);//右上
b(d-1,x+size,y+size);//中
b(d-1,x,y+2*size);//左下
b(d-1,x+2*size,y+2*size);//右下
}
}
int main(){
int size;
scanf("%d", &n);
do{
memset(s,' ',sizeof(s));//提前填充空格
b(n,0,0);
size=1;
for(int i=1;i<n;i++)size*=3;
for(int i=0;i<size;i++){
for(int j=size;j>0;j--)
if(s[i][j-1]=='X'){
s[i][j]='\0';
break;
}
printf("%s\n",s[i]);
}
printf("-\n");
scanf("%d", &n);
}while(n != -1);
}