您的位置:首页 > 其它

蓝桥杯 PREV-2 打印十字图

2016-03-15 13:33 260 查看






打印图形,找规律,

昨晚蓝桥杯辅导老师讲历年试题,其中有这道,想着回来试吧试吧,之后就一段心酸史,昨天右半部分有一条线死活打印不对,也不知如何改了,今天睡醒简单想了一下就打印出来了,这种打印题一遍思路下来,出错了很难找,找到了很难改,先放下,回过头再重新构思一遍就很轻松的改正确了。

本人是按照层数打印的,每层打印外圈边框,逐层深入,最后打印中间十字,打印边框时,本人先画上下两条边,再左右两条边,再竖着四条短边,在横着四条短边,在最后一步横着打印四条短边时,右侧的边出现了计算失误,导致没画正确,整个写下来之后,很费脑筋,再改的话,改了一个小时没改对,师兄叫我明天再来,今天先放一放,才勉强的放下了,今天十多分钟就改好了,昨天还是有点懵逼,这要是在比赛中,估计跪了。思维训练有待加强。

不多说,下面附代码:

/*************************************************************************
> File Name: prev_2.cpp
> Author: dulun
> Mail: dulun@xiyoulinux.org
> Created Time: 2016年03月14日 星期一 20时41分50秒
************************************************************************/

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define LL long long
using namespace std;

const int N = 506;
char a

;
int n;

void print()
{
int m = 4*n+5;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < m; j++)
{
cout<<a[i][j];
}
cout<<endl;
}
}

void make()
{

int m = 4*n+5;

for(int i = 0; i < m; i++)
for(int j = 0; j < m; j++)
{
a[i][j] = '.';
}

for(int ceng = 1; ceng <= n; ceng++)
{

for(int i = 2*ceng; i < m - 2*ceng; i++ )
{//上下
a[2*(ceng-1)][i] = '$';
a[m-1-(ceng-1)*2][i] = '$';
}
for(int i = (ceng)*2; i < m - 2*ceng; i++)
{//左右
a[i][(ceng-1)*2] = '$';
a[i][m-1-(ceng-1)*2] = '$';
}

for(int i = (ceng-1)*2; i < (ceng-1)*2+3; i++)
{
a[i][2*ceng] = '$';
a[i][m-2*ceng-1] = '$';//
}
for(int i = m-1-(ceng-1)*2-2; i < m-1-(ceng-1)*2+1; i++ )
{
a[i][2*ceng] = '$';
a[i][m-2*ceng-1] = '$';
}

for(int i = (ceng-1)*2; i < (ceng-1)*2+3; i++)
{
a[2*ceng][i] = '$';
// a[2*ceng][i+m-2*ceng] = '$';//
}
for(int i = 0; i < 3; i++)
{//第二天改的,第一天在一个循环中,闷了很久,今天索性重另开循环新打印吧
a[2*ceng][i+m-1-2*ceng] = '$';
}

for(int i = (ceng-1)*2; i < (ceng-1)*2+3; i++)
{
a[m-ceng*2-1][i] = '$';
// a[m-ceng*2-1][m-2*ceng-3+i-1] = '$';
//这句死活没对,也不想改了,另开一重循环,单独打印这条线,就是右下部分一条短线
}
for(int i = 0; i < 3; i++)
{
a[m-ceng*2-1][m-1-2*ceng+i] = '$';
}
}
for(int i = 0; i < 5; i++) //最后中间十字
{
int k = (m+1)/2-1;
a[k][2*n+i] = '$';
a[2*n+i][k] = '$';
}
}

int main()
{
scanf("%d", &n);
make();
print();

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