原题链接:蓝桥杯2013年第四届真题-打印十字图
解题思路:
注意事项:
参考代码:
#include<stdio.h> int main(){ char a[130][130]; int df[4][2]={{-1,1},{1,1},{1,-1},{-1,-1}}; //第一个数是行偏移值 第二个是列偏移值 右上 右下 左下 左上 int n,x,x1,x2,y1; //x是中心位置 x1 x2是偏移量 scanf("%d",&n); x=(n*4+5)/2 +1; //计算中心点的坐标 (横纵相等) for(int i=x-2;i<=x+2;i++) a[x][i]='$',a[i][x]='$'; for(int i=1,x1=x+4,x2=x-4;i<=n;i++,x1+=2,x2-=2) x1 x2是按照每次增加或减少两种 for(int k=x-i*2;k<=x+i*2;k++){ //对相连$部分处进行填充 a[x1][k]='$'; a[k][x1]='$'; a[x2][k]='$'; a[k][x2]='$'; } for(int i=0;i<4;i++){ //四个方向 x1=x+df[i][0]*2; y1=x+df[i][1]*2; 初始化某方向上的起始点 for(int j=1;j<=n;j++){ a[x1][y1]='$'; a[x1+df[i][0]][y1]='$'; a[x1][y1+df[i][1]]='$'; x1=x1+df[i][0]*2; y1=y1+df[i][1]*2; } } for(int i=1;i<=n*4+5;i++){ //打印 for(int j=1;j<=n*4+5;j++) if(a[i][j]=='$') printf("%c",a[i][j]); else printf("."); printf("\n"); } return 0; }
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复