hi


私信TA

用户名:1014003326

访问量:7156

签 名:

等  级
排  名 5395
经  验 1484
参赛次数 0
文章发表 10
年  龄 20
在职情况 学生
学  校 山东信息职业技术学院
专  业

  自我简介:

解题思路:

          首先要计算n=1的时候长宽和n的关系。

          在计算n=2的,n=3的,找到n与长宽关系。

          之后先把n=1的逐行打印出来。

          这个打印的时候,用二维数组进行处理。

          然后就写出来一大串的循环关系。

          之后,在n=1的时候打印的时候是在二维数组(0,0)的位置,如果把这个n=3 n=2 n=1变成动态的,就需要从相对位置开始打印。

          打印图形的题,就是找数量关系,找到关系然后逐行打印。如果是多重的,那么就先写出来一种可能的n=1,然后再把这一种可能的,改活。一种可能的时候是从(0,0)开始打印,而多重就是从相对位置开始打印。

          具体看代码,推推数学关系,慢慢就出来了,先写固定的,再写相对的。硬着头皮依据数学关系慢慢推。


过程:建立二维数组-->在相应的位置上把数组该位置的内容改为'$'-->输出二维数组非'$'的位置输出'.'-->结束。


参考代码:

#include <stdio.h>
int N;
char a[200][200];
void print()
{
	int i,j;
	for(i=0;i<9+(N-1)*4;i++)
	{
		for(j=0;j<9+(N-1)*4;j++)
		{
			if(a[i][j]!='$')	a[i][j]='.';
			printf("%c",a[i][j]);
		}
		printf("\n");
	}
 } 
void f(int n)
{
	int i,l=(N-n)*2,r=9+(N-1)*4-1-l;    //根据最大围数,和目前的围数,推算相对位置。看不懂以下代码就假设N n(N=4 n=4 N=4 n=3)的数带进去看看,把图片或者图形看成二维数组,这个数据是推导出来的。 
	//正数第一行与倒数第一行。 
	for(i=l+2;i<=r-2;i++)
	{
		a[l][i]='$';
		a[r][i]='$';
	}
	//正数第二行与倒数第二行。 
	a[l+1][l+2]='$';
	a[l+1][r-2]='$';
	a[r-1][l+2]='$';
	a[r-1][r-2]='$';
	//正数第三行与倒数第三行。 
	a[l+2][l+0]='$'; a[l+2][l+1]='$'; a[l+2][l+2]='$'; a[l+2][r-0]='$'; a[l+2][r-1]='$'; a[l+2][r-2]='$'; 
	a[r-2][l+0]='$'; a[r-2][l+1]='$'; a[r-2][l+2]='$'; a[r-2][r-0]='$'; a[r-2][r-1]='$'; a[r-2][r-2]='$'; 
	//左右两边的中间直线区域。 
	for(i=l+2;i<=r-2;i++)
	{
		a[i][r]='$';
		a[i][l]='$';
	} 
}
int main()
{
	int i;
	scanf("%d",&N);
	for(i=N;i>=1;i--)    //打印第几圈。 
	{
		f(i);
	}
	for(i=2*N;i<=2*N+4;i++)    //图形中间的十。 
	{
		a[2*N+2][i]='$';
		a[i][2*N+2]='$';
	}
	print();    //输出 
	return 0;
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区