一道蓝桥比赛的训练打印题【构造+不断的构造+构造规律】

历届试题 打印十字图

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

题目地址:http://lx.lanqiao.org/problem.page?gpid=T25

问题描述

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

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

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

输入格式

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

输出格式

对应包围层数的该标志。

样例输入1

1

样例输出1

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

样例输入2

3

样例输出2

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

提示

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

代码:

#include <stdio.h>

int main()
{
    char s[150][150];
    int i, j, k;
    int n;
    scanf("%d", &n);
    int center=(9+(n-1)*4+1)/2;
    s[center][center]=‘$‘;
    for(j=center-2; j<=center+2; j++)
        s[center][j]=‘$‘;
    for(i=center-2; i<=center+2; i++)
        s[i][center]=‘$‘; //构造中心十字

    int dd=4; int ff=5;
    for(i=1; i<=n; i++){
        int up=center-dd;
        for(j=center-((ff-1)/2); j<=center+((ff-1)/2); j++)
            s[up][j]=‘$‘;

        int down=center+dd;
        for(j=center-((ff-1)/2); j<=center+((ff-1)/2); j++)
            s[down][j]=‘$‘;

        int left=center-dd;//列
        for(k=center-((ff-1)/2); k<=center+((ff-1)/2); k++)
            s[k][left]=‘$‘;

        int right=center+dd;
        for(k=center-((ff-1)/2); k<=center+((ff-1)/2); k++)
            s[k][right]=‘$‘;
        dd+=2;
        ff+=4;
    } //打印四个边栏
    for(i=1; i<=n; i++){
        //构造1个点
        int a, b;

        a=center-i*2;
        s[a][a]=‘$‘; s[a-1][a]=‘$‘; s[a][a-1]=‘$‘;

        b=center+i*2;
        s[b][b]=‘$‘; s[b][b+1]=‘$‘; s[b+1][b]=‘$‘;

        s[a][b]=‘$‘; s[a-1][b]=‘$‘; s[a][b+1]=‘$‘;

        s[b][a]=‘$‘; s[b][a-1]=‘$‘; s[b+1][a]=‘$‘;
    }

    for(i=1; i<=9+(n-1)*4; i++)
    {
        for(j=1; j<=9+(n-1)*4; j++)
            if(s[i][j]==‘$‘)
                printf("$");
            else
                printf(".");
        printf("\n");
    }
    return 0;
}
时间: 2024-08-06 08:23:42

一道蓝桥比赛的训练打印题【构造+不断的构造+构造规律】的相关文章

逻辑思维训练550题

前序:思维训练让你更高.更强!更新时间2010-1-14 17:19:45 字数:1249 当今时代是一个知识爆炸的时代,也是一个头脑竞争的时代:在竞争日益激烈的环境下,一个人想要很好地生存,不仅需要付出勤奋,而且还必须具有智慧.随着人才竞争的日趋激烈和高智能化,越来越多的人认识到只拥有知识是远远不够的.因为知识本身并不能告诉我们如何去运用知识,如何去解决问题,如何去创新,而这一切都要靠人的智慧--大脑思维来解决.认真观察周围的人我们也会发现,那些在社会上有所成就的人无不是具有卓越思维能力的人.

蓝桥杯——算法训练之乘积最大

问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加.活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大. 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当N=3,K=1时

第四届蓝桥杯 c/c++真题

第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天.这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日. 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日. 高斯获得博士学位的那天日记上标着:

C语言图形打印题总结

此帖用于总结最近在C语言学习中遇到的图形打印题,还望大牛们指正 1.等腰三角形打印 输入一个数,打印倒等腰三角形. 如输入:5 打印: ***** *** * 分析:对于此类题目应先着手分析,查找规律 行号 空格 星号 1 0 5 2   1     3 3  2     1 行数:n = (输入数字 + 1) /  2; 空格与行数的关系:空格数 = 行数 - 1: 星号: 行数 * 2 - 1:(行数由大到小控制输出) 代码如下: 1 void exam4() 2 { 3 int n, nu

一道有意思的C语言编程题

最近在看经典的C语言入门书籍K&R,虽然是一本入门书籍,可是其中的精妙之处却需要慢慢体会.其中的经典题很多,仔细琢磨一定会收获良多. 今天看到这样一道题:编写一个删除C语言程序中所有的注释语句.感觉颇有意思,与大家一起分享一下: 我的思路: 找到注释的起始符号 \ 判断紧接着的输入字符,如果是*或者是\,则说明后面全是注释,跳过即可,否则照样输出 其他则直接输出 疑问: 所配套的答案书中提出要考虑引号后面的内容以做出响应,不是很明白这是为什么.个人认为无需考虑引号的影响也能将注释去除,希望有高手

hdu 1285 确定比赛名次 (模板题)

确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11353    Accepted Submission(s): 4525 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接

一道很有意思的java线程题

这几天看结城浩的<java多线程设计模式>,跟着做一些习题,有几道题目很有意思,记录下自己的体会. 首先是题目(在原书212页,书尾有解答): public class Main { public static void main(String[] args) { try { Blackhole.enter(new Object()); } catch (InterruptedException e) { e.printStackTrace(); } } } public class Blac

一道int与二进制加减题

int dis_data = 32769; if( dis_data > 0x7fff)  dis_data -= 0xffff; printf("%d\n",dis_data); 上面的dis_data 输出值会是多少?  初一看可能还看不出来,那就计算一下: 0x7fff转换为十进制为 32767,显然 dis_data > 0x7fff, 所以要执行 dis_data -= 0xffff;这一句代码. 现在dis_data = 32769, 那么 0xffff转换为十

上海华为的一道关于指针方面的编程题(C/C++)

int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标. 尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路 注:我的方法的复杂度为O(n),大家如果有其它方法希望可以交流一下. /* author: jiangxin Blog: http://blog.csdn.net/jiangxinnju */ #include <ios