北理工C语言--冬奥雪花 (乐学平台题目)

题目描述

jingjing学长看了冬奥的开幕式,觉得冬奥的雪花十分好看,所以他打算使用递归算法自己编程来实现一个雪花。

提示

请仔细观察样例,尤其要注意空格的数量及位置。

输入

一个正整数 n (n< 30) 表示要求打印图形的递归深度。

输出

对应递归深度的雪花图案。

样例输入

1

样例输出

*

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 1↵
以文本方式显示
  1. *↵
1秒64M0
测试用例 2以文本方式显示
  1. 2↵
以文本方式显示
  1.   *  ↵
  2. * * *↵
  3.   *  ↵
1秒64M0
测试用例 3以文本方式显示
  1. 3↵
以文本方式显示
  1.         *        ↵
  2.       * * *      ↵
  3.         *        ↵
  4.   *     *     *  ↵
  5. * * * * * * * * *↵
  6.   *     *     *  ↵
  7.         *        ↵
  8.       * * *      ↵
  9.         *        ↵
1秒64M0

#include<stdio.h>
#include<math.h>
char pic[2000][2000];
int main()
{
	int size; 
	for(int i=0;i<2000;i++)
		for(int m=0;m<2000;m++) pic[i][m]=' '; //把存放雪花的字符数组每个字符都定为空格 
	scanf("%d",&size);
	if(size==1)
	{
		printf("*\n");
		return 0;
	}
	if(size==2)
	{
		printf("  *  \n* * *\n  *  \n");
		return 0;
	}                                     //处理掉size=1或2的情况 
	int wide_midplace=pow(3,size-1)-1,height_midplace=pow(3,size-1)/2;
	//wide_midplace,height_midplace:二维数组里面雪花的正中心星号的两个角标 
	pic[height_midplace][wide_midplace]='*';
	pic[height_midplace-1][wide_midplace]='*';pic[height_midplace+1][wide_midplace]='*';
	pic[height_midplace][wide_midplace-2]='*';pic[height_midplace][wide_midplace+2]='*';
	/*此时size大于等于3,我们从2开始递归,现在把雪花中心初始化为  *
													            * * *
                                                            	  *      */
	void pic_expand(int sizenow,int size,char pic[2000][2000]); //这个是让雪花向四周延展的函数 
	pic_expand(2,size,pic);
	for(int i=0;i<pow(3,size-1);i++) //打印出来与雪花大小相符的字符数组即可 
	{
		for(int m=0;m<2*pow(3,size-1)-1;m++)
			printf("%c",pic[i][m]);
		printf("\n");
	}		
	return 0;
}
void pic_expand(int sizenow,int size,char pic[2000][2000])
{
	if(sizenow==size) return; //收敛条件。当雪花从sizenow=2大小。扩展到size大小的时候停止扩展 
	int mwide=pow(3,size-1)-1,mheight=pow(3,size-1)/2;   //mheight,mwide为雪花中心那个星号的角标 (mid_wide的缩写) 
	int wide=2*pow(3,sizenow-1)-1,height=pow(3,sizenow-1);   //wide和height分别指当前雪花的宽度和高度 
	int spwide=mwide-wide/2,spheight=mheight-height/2;
	   //spheight,spwide是雪花所在的长方形左上角的那个空格的角标,即雪花的第一个字符 
	   //spheight意为startplace_height
	for(int i=0;i<height;i++)//外层循环是逐层扫描雪花 
	{
		for(int j=0;j<wide;j++) //内层循环是逐列进行 
		{
			pic[spheight+i][spwide+j-wide-1]=pic[spheight+i][spwide+j]; //将雪花中的这个字符向左移动wide+1个字符 
			pic[spheight+i][spwide+j+wide+1]=pic[spheight+i][spwide+j];//将雪花中的这个字符向右移动wide+1个字符
			pic[spheight+i-height][spwide+j]=pic[spheight+i][spwide+j];//将雪花中的这个字符向上移动height个字符
			pic[spheight+i+height][spwide+j]=pic[spheight+i][spwide+j];//将雪花中的这个字符向下移动height个字符
		}   //这样一来,我们将原来位于中心位置的雪花的上下左右四个方向都平移复制了一份 
	}	
	sizenow++;//这个时候相当于雪花尺寸+1了 
	pic_expand(sizenow,size,pic); //我们对这个+1过后的雪花让它继续扩展,直到扩展到size大小 
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
北京理工大学为了提升学生们对C语言的学习兴趣,决定举办一场C语言比赛。比赛主要是通过学生们的编程能力和创新思维来评判,旨在提高学生们对C语言的掌握程度,并培养他们的动手实践能力。 首先,比赛将分为初赛和决赛两个阶段。在初赛阶段,学生们将参与一场理论考试,测试他们对C语言基础知识的掌握程度。通过初赛选拨出的前若干名学生将进入决赛阶段。 在决赛阶段,学生们将面对编程挑战。每个参赛者将有一天的时间设计和完成一个由组委会提供的编程项目。这个项目将要求学生们综合运用C语言的各种知识,包括变量、数据类型、控制结构、函数、指针等等。参赛者需要在规定时间内提交自己的程序代码,并通过演示来展示自己的成果。 评判方面,将由一位评委团队来负责,评委们将根据参赛者们的编程技巧、代码的质量、创新思维和程序的实用性等方面进行评分。评分最高的学生将被评为比赛的冠军,并有机会获得奖金和荣誉证书。 除了比赛本身,北京理工大学还将安排相关的培训和讲座,为参赛选手提供更多的学习机会。参赛学生可以借此机会与其他对C语言感兴趣的同学们交流学习,互相促进进步。 通过这场比赛,北京理工大学希望能够激发学生们学习C语言的热情和动力,提高他们的编程能力和创新思维,为他们的未来学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红茶Nauy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值