原题链接:蓝桥杯2013年第四届真题-打印十字图
解题思路:看下图(3层的图形),可以看出规律。最中间的是一个十字架。外层由3个封闭的框围起来。
一个框可以分成以下部分:上下两边,左右两边,左上角,右上角,左下角,右下角。
按照这个思路一层层写程序即可。

参考代码:
#include <stdio.h>
#include <string.h>
char s[250][250];
int main()
{
int i,j,k,n;
int m;
memset(s,'.',sizeof(s)); //全部赋值为.
scanf("%d",&n);
m=4*n+5; //n层对应的行数和列数
k=2; i=0;
while(n--) //n层
{
for(j=k;j<m-k;j++)
{
s[i][j]=s[m-1-i][j]='$'; //上下两边
s[j][i]=s[j][m-1-i]='$'; //左右两边
}
s[k][k]=s[k][k-1]=s[k-1][k]='$'; //左上角
s[k][m-1-k]=s[k][m-1-(k-1)]=s[k-1][m-1-k]='$'; //右上角
s[m-1-k][k]=s[m-1-k][k-1]=s[m-1-(k-1)][k]='$'; //左下角
s[m-1-k][m-1-k]=s[m-1-k][m-1-(k-1)]=s[m-1-(k-1)][m-1-k]='$'; //右下角
k=k+2;
i=i+2;
}
i=j=m/2;
for(k=1;k<=2;k++) //中间的十字架
{
s[i][j]='$';
s[i-k][j]=s[i+k][j]='$';
s[i][j-k]=s[i][j+k]='$';
}
for(i=0;i<m;i++) //输出整个图形
{
for(j=0;j<m;j++)
printf("%c",s[i][j]);
printf("\n");
}
return 0;
}0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复