藍橋杯-打印十字圖


  歷屆試題 打印十字圖  
時間限制:1.0s   內存限制:256.0MB
 

   

 
問題描述

小明為某機構設計了一個十字型的徽標(並非紅十字會啊),如下所示:

..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

對方同時也需要在電腦dos窗口中以字符的形式輸出該標志,並能任意控制層數。

輸入格式
一個正整數 n (n<30) 表示要求打印圖形的層數。
輸出格式
對應包圍層數的該標志。
樣例輸入1
1
樣例輸出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
樣例輸入2
3
樣例輸出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
請仔細觀察樣例,尤其要注意句點的數量和輸出位置。
 

這道題看了字符很久也沒發現規律,只能把圖形畫出來才發現對稱性,

我的思路是先模擬出左邊1/8的圖形,將剩余的1/8,1/4,1/2利用對稱性求得,這樣來簡化代碼量

http://devx-wordpress.stor.sinaapp.com/uploads/2014/05/lanqiao-pre-2-graph.png

#include <iostream>
#include <cstdio>

using namespace std;

int a[500][500];

int main()
{
    int n = 0, cen = 0;
    while(scanf("%d",&n) == 1)
    {
        cen = 2*(n+1);
        a[cen][cen] = 1;
        a[cen][cen-1] = a[cen][cen-2] = 1;
        for(int i = 2; i <= cen - 2; i = i+2)
        {
            for(int j = i - 2; j <= i; j ++ )
                a[i][j] = 1;
            for(int m = i,n = i -2; m <= cen; m++)
                a[m][n] = 1;
        }//左邊1/8圖形

        for(int i = 0; i <= cen; i++)
          for(int j = 0; j <= i ; j++)
                a[j][i] = a[i][j];
        for(int i = 0; i <= cen; i++)
            for(int j = 0; j <= cen; j++)
                a[i][2*cen-j] = a[i][j];
        for(int j = 0; j <= 2*cen; j++)
          for(int  i = 0; i <= cen; i ++)
                a[2*cen-i][j] = a[i][j];
        for(int i = 0; i <= 2*cen; i ++)
        {
            for(int j = 0; j <= 2*cen; j++)
            {
                if(a[i][j] == 1)  printf("$");
                else
                    printf(".");
            }
            printf("\n");
        }
    }
    return 0;
}

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com