解题思路:

注意事项:

参考代码:

#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.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

uq_57476137480 3年前 回复TA
很好的思路,受教了