Cruz (Baidu recluta Zhenti otoño de 2017) Insights

Aquí Insertar imagen Descripción
Aquí Insertar imagen DescripciónTema 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
Aquí Insertar imagen Descripcióndonde 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;
}
Publicado 30 artículos originales · ganado elogios 9 · vistas 3559

Supongo que te gusta

Origin blog.csdn.net/znevegiveup1/article/details/104836775
Recomendado
Clasificación