原题链接:蓝桥杯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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复