您的位置:首页 > 其它

蓝桥杯 —— 打印十字图

2017-04-05 10:42 253 查看
题目标题:打印十字图
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)

$$$$$$$$$$$$$
$           $
$$$ $$$$$$$$$ $$$
$   $       $   $
$ $$$ $$$$$ $$$ $
$ $   $   $   $ $
$ $ $$$ $ $$$ $ $
$ $ $   $   $ $ $
$ $ $ $$$$$ $ $ $
$ $ $   $   $ $ $
$ $ $$$ $ $$$ $ $
$ $   $   $   $ $
$ $$$ $$$$$ $$$ $
$   $       $   $
$$$ $$$$$$$$$ $$$
$           $
$$$$$$$$$$$$$

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

为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。


输入格式: 

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

输出: 

对应包围层数的该标志。

例如: 



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

资源约定: 

峰值内存消耗 < 64M 

CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0 

注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。 

注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

#include <stdio.h>

int go(int i, int j, int n)
{
int tmp;
//上下对称
if (i > n * 2 + 3)
i = n * 4 + 6 - i;
//左右对称
if (j > n * 2 + 3)
j = n * 4 + 6 - j;
//四分之一部分对角线对称
if(i<=j)
{
tmp = i;
i = j;
j = tmp;

}
//前两行时显示的为 '.'
if (i <= 2 && j <= 2) return 0;
//每一奇数行连续的三个$
if (i % 2 == 1 && j >= i - 2) return 1;
//每一个奇数列中奇异点
if (j % 2 == 1 && i>j+2) return 1;
return 0;
}

int main()
{
int n;
scanf("%d", &n);
int i, j;
for (i = 1; i <= n*4+5; i++)
{
for (j = 1; j <= n*4+5; j++)
{
if (go(i, j, n))
printf("$");
else
printf(".");
}
printf("\n");
}
return 0;
}






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: