poj2083

简单题

View Code
#include <iostream>
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
#include
<cmath>
using namespace std;

#define maxn 800

char map[maxn][maxn];

void make(int n)
{
int each = pow(double(3), n - 2);
for (int i = 0; i < each; i++)
for (int j = 0; j < each; j++)
map[i
+ each * 2][j] = map[i + each * 2][j + each * 2] = map[i][j + each * 2] = map[i + each][j + each] = map[i][j];
}

int findlast(int n, int size)
{
int ret = size;
while (map[n][ret - 1] == 0)
ret
--;
return ret;
}

void print(int n)
{
int size = pow(double(3), n - 1);
for (int i = 0; i < size; i++)
{
int temp = findlast(i, size);
for (int j = 0; j < temp; j++)
if (map[i][j])
printf(
"X");
else
printf(
" ");
printf(
"\n");
}
printf(
"-\n");
}

int main()
{
//freopen("t.txt", "r", stdin);
memset(map, 0, sizeof(map));
map[
0][0] = 'X';
for (int i = 2; i <= 7; i++)
make(i);
int n;
while (scanf("%d", &n), n != -1)
print(n);
return 0;
}

posted @ 2011-06-06 20:43  金海峰  阅读(305)  评论(0编辑  收藏  举报