叮咚叮咚


私信TA

用户名:13060009323

访问量:9497

签 名:

敲代码是一种工科生的艺术

等  级
排  名 4147
经  验 1756
参赛次数 0
文章发表 16
年  龄 21
在职情况 学生
学  校 四川工商学院
专  业

  自我简介:


解题思路:

注意事项:

参考代码:

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

4 人评分

  评论区

很好的思路,受教了
2021-12-07 23:02:03
  • «
  • 1
  • »