圣诞树浅描述(1)


跳转:牛客–圣诞树(2)

前言

大家好,今天给大家介绍两种使用C语言描绘圣诞树的方法,希望可以让大家在圣诞节来临之际可以收获心仪对象的芳心。

一、题目描述:

牧场大了,什么牛都有,今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他编写程序,实现妄想。
输入描述:
输入圣诞树的高度h,1<= h <= 100
输出描述:
输出对应的圣诞树

二、运行示例:

在这里插入图片描述
在这里插入图片描述

三、题目分析:

·由三个示例可以先将圣诞树初步划分为两部分–树枝 和 树干
·树枝:树枝左边是一系列递减的空格,而右边都是由最初的图形堆叠而成
首先设置开始时的空格,输入1时最多两个空格,输入每增大1,最大空格数增加3,之后每行空格数减一

//输入 n
int sum = 3 * n - 1;//最大空格数

将初阶图形看做整体则有第一层1个,第二层2个,第三层3个。。。
那么我们就要确立初阶图形如何设立然后在两阶以上的树枝中,不止由图,每个图中间还有一部分空格间隔,那么我们又该如何控制空格的输出呢?
如果大家仔细观察就会发现,图和空格的形状是相同的,只不过是倒立的,而且每一行图和空格的和都为6,那么我们就可以将*图和空格同时输出,如下:

			printf("*     ");
			printf("* *   "); 
			printf("* * * ");

现在有了图形,就要判断什么情况输出哪一行,以及要输出多少次,如下

				//输入高度 n
		int sum_z=3*n;//树枝总行数
		for (int i = 1; i <= sum_z; i++)//树枝的行数
	{
		int k = (i - 1) / 3 + 1;//图形输出次数
		while (k--) {
			switch (i % 3) {
			case 1: printf("*     "); break;
			case 2: printf("* *   "); break;
			case 0: printf("* * * "); break;
			}
		}
		printf("\n");
	}	

·树干:最后输出树干,输入多大数字就输出几行,这里要注意前面的空格,等于最大空格数*

for (int i = 0; i < n; i++){
		for (int j = 0; j < sum; j++)
			printf(" ");
		printf("*\n");
}

四、全部代码:

代码如下(示例):

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(){
	int n = 0;
	scanf("%d", &n);
	int sum_z = 3 * n;//树枝总行数
	int sum = 3 * n - 1;//开始的空格最大值
	for (int i = 1; i <= sum_z; i++){//树枝的行数
		//开始的空格
		for (int r = 0; r <= sum - i; r++)
			printf(" ");
		int k = (i - 1) / 3 + 1;//图形输出次数
		while (k--) {
			switch (i % 3) {
			case 1: printf("*     "); break;
			case 2: printf("* *   "); break;
			case 0: printf("* * * "); break;
			}
		}
		printf("\n");
	}
	for (int i = 0; i < n; i++){
		for (int j = 0; j < sum; j++)
			printf(" ");
		printf("*\n");
	}
	return 0;
}

总结

以上为牛客中初级圣诞树的描述,在下一篇博客中我会使用另一种方法介绍难度更大也更加漂亮的圣诞树,感谢大家的关注和支持。

评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值