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