1. 程式人生 > >藍橋杯-歷屆試題-列印十字圖

藍橋杯-歷屆試題-列印十字圖

歷屆試題 列印十字圖 問題描述

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

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

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

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

int fuck(int i, int j, int len)
{
	//將圖一分為四隻看左上角部分
	//上下對稱過去  原圖下半部分的橫座標對稱到圖的上半部分
	if (i > len / 2 + 1)
	{
		i = len / 2 + 1 - (i - (len / 2 + 1));
	}
	//左右對稱過去  原圖右半部分的縱座標對稱到圖的左半部分
	if (j > len / 2 + 1)
	{
		j = len / 2 + 1 - (j - (len / 2 + 1));
	}
	//每個角上的四個點
	if (i <= 2 && j <= 2)
		return 0;
	//上下左右每一層連續的部分  連續不拐彎的部分
	if (i % 2 == 1 && j > i + 1 || j % 2 == 1 && i>j + 1)
		return 1;
	//其餘部分  拐彎部分的三個'$'
	if (i > 1 && i % 2 == 1 && j == i || i > 1 && i % 2 == 1 && j == i - 1 || j > 1 && j % 2 == 1 && i == j || j > 1 && j % 2 == 1 && i == j - 1)
		return 1;
	return 0;
}

int main()
{
	int n;
	cin >> n;
	int  len = 4 * n + 5;   //邊長
	for (int i = 1; i <= 4 * n + 5; i++)
	{
		for (int j = 1; j <= 4 * n + 5; j++)
		{
			if (fuck(i, j, len))
			{
				cout << "$";
			}
			else
			{
				cout << ".";
			}
		}
		cout << endl;
	}
	return 0;
}