蓝桥杯 —— 打印十字图

题目标题:打印十字图

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

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


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

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

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

输出: 
对应包围层数的该标志。

例如: 
这里写图片描述

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

资源约定: 
峰值内存消耗 < 64M 
CPU消耗 < 1000ms

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

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

注意: main函数需要返回0 
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。 
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。

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

扫描二维码关注公众号,回复: 1988927 查看本文章

#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;
}
 
 
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/xf_zhen/article/details/69228413