Tema Enlace
primer lugar, el sujeto debe ser el pensamiento recurrente, debido a los pequeños gráficos que pondrán gráfico grande
En segundo lugar, primero debe determinar el punto medio de gráficos, como puede ser determinado por el punto medio de los gráficos abajo ubicación gráficos, además del centro hacia los alrededores cinco patrón de distribución direccional recursiva intermedio, aquí la posición de forma recursiva neutral por un patrón recurrente de cuatro límite
donde la clave es encontrar la longitud de datos1 y datos2, se puede continuar de forma recursiva de modo
datos1 puede ser considerada como de orden cero 3 Receta 1 ha sido añadido a la potencia de n-3 3, y 3 de la potencia
usando la fórmula de superposición de potencia disponible correspondientes resultados
data2 es n-2-ésima potencia de 3
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define N 1000
char s[N][N];
void prints(int n,int rowstart,int rowend,
int columnstart,int columnend)
{
if(n == 1&&rowstart == rowend&&columnstart == columnend)
{
s[rowstart][columnstart] = 'o';
}
else
{
int data1 = (int)(pow(3.0,n-2)+0.5)-1;
data1 = data1/2;
//data1利用次方的求和公式求出,+0.5是为了避免pow函数所带来的误差
int data2 = (int)(pow(3.0,n-2)+0.5);
//data2通过n-2次方求出结果
int rowmiddle = (rowstart+rowend)/2;
int columnmiddle = (columnstart+columnend)/2;
prints(n-1,rowmiddle-data1-data2,rowmiddle-data1-1,
columnmiddle-data1,columnmiddle+data1);
//递归出左边图形的起始坐标,终止坐标
prints(n-1,rowmiddle+data1+1,rowmiddle+data1+data2,
columnmiddle-data1,columnmiddle+data1);
//递归出右边图形的起始坐标,终止坐标
prints(n-1,rowmiddle-data1,rowmiddle+data1,
columnmiddle-data1-1,columnmiddle-data1-data2);
//递归出上面图形的起始坐标,终止坐标
prints(n-1,rowmiddle-data1,rowmiddle+data1,
columnmiddle+data1+1,columnmiddle+data1+data2);
//递归出下面图形的起始坐标,终止坐标
prints(n-1,rowmiddle-data1,rowmiddle+data1,
columnmiddle-data1,columnmiddle+data1);
//递归出中间图形的起始坐标,终止坐标
}
}
int main(){
int n1;
scanf("%d",&n1);
for(int u=1;u<=n1;u++)
{
fill(s[0],s[0]+N*N,' ');
int n;
scanf("%d",&n);
int data = (int)(pow(3.0,n-1)+0.5);
int total = (int)(pow(3.0,n-1)+0.5);
int middle = (1+data)/2;
prints(n,1,data,1,data);
printf("Case #%d:\n",n1);
for(int i=1;i<=total;i++)
{
for(int j=1;j<=total;j++)
{
printf("%c",s[i][j]);
if(j == total)
{
printf("\n");
}
}
}
}
return 0;
}