蓝桥杯 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; }
相关文章推荐
- C#实现图形位置组合转换的方法
- C#实现判断图形文件格式的方法
- C#实现图形路径变换的方法
- php生成图形验证码几种方法小结
- CentOS的图形安装及初始环境设置教程
- C#实现图形区域组合操作的方法
- php实现图形显示Ip地址的代码及注释
- Java Web开发之图形验证码的生成与使用方法
- android中图形图像处理之drawable用法分析
- Android编程开发之在Canvas中利用Path绘制基本图形(圆形,矩形,椭圆,三角形等)
- Android开发之图形图像与动画(五)LayoutAnimationController详解
- C++实现图形界面时钟表盘代码
- C++实现二维图形的傅里叶变换
- Java在Linux下 不能处理图形的解决办法 分享
- python开发之tkinter实现图形随鼠标移动的方法
- Linux下基于GTK的C/S聊天软件
- 北京图王软件开发有限公司产品介绍
- PB做的史上最强的矢量画图软件(VISIO也要低头)
- 一次接线图的图符设计
- 一次接线图的图形概要设计