クロス(BaiduのリクルートZhenti秋2017)の洞察

ここに画像を挿入説明
ここに画像を挿入説明トピックリンク
まず大きなグラフィックを置く小規模なグラフィックスのための対象は、再帰的に考えなければなりません
グラフィックス場所ダウン、プラス真ん中から周囲にグラフィックスの中間点によって決定することができるよう、あなたが最初に、グラフィックスの中間点を決定する必要があります第二に5つの中間再帰方向分布パターン、4つの境界の再帰的パターンによってここにI再帰的に中立位置
ここに画像を挿入説明にキーがDATA1とDATA2の長さを見つけることで、再帰的に継続することができる
DATA1は、ゼロ次とみなすことができる3レシピ1は、n-3 3のパワーに加え、電力の3れている
利用可能な対応する結果のパワーオーバーレイ式を用いて
DATA2 3のN-2乗です

#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;
}
公開された30元の記事 ウォンの賞賛9 ビュー3559

おすすめ

転載: blog.csdn.net/znevegiveup1/article/details/104836775