旧日风声


私信TA

用户名:shawfi

访问量:7009

签 名:

等  级
排  名 3637
经  验 1883
参赛次数 0
文章发表 18
年  龄 0
在职情况 学生
学  校 重庆邮电大学
专  业

  自我简介:

解题思路:
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 人评分

  评论区

  • «
  • »