您的位置:首页 > 其它

蓝桥杯-打印十字图

2015-03-08 10:31 155 查看
历届试题 打印十字图

时间限制:1.0s 内存限制:256.0MB

问题描述

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

输入格式

一个正整数 n (n<30) 表示要求打印图形的层数。

输出格式

对应包围层数的该标志。

样例输入1

1

样例输出1

..$$$$$..

..$...$..

$$$.$.$$$

$...$...$

$.$$$$$.$

$...$...$

$$$.$.$$$

..$...$..

..$$$$$..

样例输入2

3

样例输出2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

提示

请仔细观察样例,尤其要注意句点的数量和输出位置。

这道题看了字符很久也没发现规律,只能把图形画出来才发现对称性,

我的思路是先模拟出左边1/8的图形,将剩余的1/8,1/4,1/2利用对称性求得,这样来简化代码量



#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]
= 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: