原题链接:蓝桥杯2013年第四届真题-打印十字图
解题思路:
1. 初始化为全'.'图
2. 建立坐标系将十字改成'$'
3. 依照对称关系将其余部分改成'$'
注意事项:
注意坐标轴原点的选取以及x,y的方向。
参考代码:
//1442: 打印十字图 #include <stdio.h> int main() { int n, i, j, o, p, q; char grah[125][125]; scanf("%d", &n); // 初始化底图 for(i=0; i<(4*n+5); i++) { for(j=0; j<(4*n+5); j++) { grah[i][j] = '.'; } } // 按规律将'.'变为'$' // 从最中间的十字开始,因为图像是中心对称的,所以只需要变一个四方角,然后给对应的位置赋值。 // 以中心点为坐标建立一个x右向为正,y下向为正的坐标轴。 grah[n*2+2][n*2+2] = '$'; grah[n*2+3][n*2+2] = grah[n*2+4][n*2+2] = grah[n*2+2][n*2+3] = grah[n*2+2][n*2+4] = '$'; // 记录上一个十字的端点值 o = n*2+2; p = o+2; q = o+2; for(i=1; i<=n; i++) { // 将图像的绘制分为向上向右向上向右4个部分 for(j=o; j<=q; j++) grah[p+2][j] = '$'; for(j=p+2; j>=p; j--) grah[j][q] = '$'; for(j=q; j<=q+2; j++) grah[p][j] = '$'; for(j=p; j>=o; j--) grah[j][q+2] = '$'; p += 2; q += 2; } // 按照对称关系,画出其它部分。 for(i=o; i<=(o+2*n+2); i++) { for(j=o; j<=(o+2*n+2); j++) { if(grah[i][j] == '$') { grah[2*o-i][2*o-j] = grah[2*o-i][j] = grah[i][2*o-j] = '$'; // printf("1: %d %d\n", i, j); } } } // printf("2: %c", grah[8][9]); // 打印图像 for(i=0; i<(4*n+5); i++) { for(j=0; j<(4*n+5); j++) { printf("%c", grah[i][j]); } printf("\n"); } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复