当前位置:网站首页>【圣诞节给爱的人打印一颗圣诞树吧】超详细代码实现——圣诞树打印
【圣诞节给爱的人打印一颗圣诞树吧】超详细代码实现——圣诞树打印
2022-08-03 05:11:00 【tt142】
上面是圣诞树的大致形状
用代码实现出来是这样的
该想法的来源是牛客网的一道题目
当然只要爱足够多
你的圣诞树(爱)可以溢出屏幕,哈哈
那么我们以
为例子,也就对应题目里的h=2来详细讲解
首先我们注意到,h最大可以取到100,也就是这么庞大的圣诞树一定要用循环+找规律实现
我的第一反应 是数组,先从一小颗圣诞树实现
但是显然这个问题的特点在于空格的打印,而用数组初始化之后打印“你就慢了”
之所以特点在空格
是我们发现h=1的时候除去底部的树干,整个树枝是对称的
*注:
h=1(如图),我们称这个最基本的单元(不包含树干)为小圣诞树
我们完全可以从每一层(一共三层)把树枝分成 一堆空格+*的安排 两部分
那么我们首先实现空格这个问题
现在观察h=2,因为只有一个小圣诞树(h=1)是发现不了当层数变多时候的规律的
注意到 当图片中j=1时 也就是小圣诞树第一层,前面应该有5个空格
和j=4时的小圣诞树的第一层,中间隔了3个格子,也就是 如果设置一个变量,用他表示小圣诞树第一层的空格数,每次循环之后应该+=3
但是换个角度思考,可以让他每次++,但条件是0< <3*h-j 或者是从1开始到3*h-j+1
(这里比较抽象,需要带入h=2,好好想一下逻辑)
为什么不采用+=3的方法,因为这样知识分析了第一层的空格情况,但是用0~3*h-j就完美解决了小圣诞树1~3层的所有空格问题
剩下的就是*的安排
这个部分是根据每一层的不同特点具体安排的,绝对不能向空格一样一概而论
基于上述的+=3思想
由于我们从图片列数是1开始分析的,而不是从上至下,所以是-=3
所以代码如下
//打印圣诞树
int main()
{
int h = 0;
scanf("%d", &h);
for (int j = 1; j <= 3 * h; j++)
{
for (int m = 0; m < 3 * h-j; m++)
printf(" "); //全局空格的打印,和后面所有打印空格的代码二选一
if (j % 3 == 1)
{
// for (int m = j; m < 3 * h; m++)
// printf(" "); //一个空格
for (int p = j; p > 0; p -= 3)
printf("* "); //5个空格
printf("\n");
}
if (j % 3 == 2)
{
// for (int c = j; c < 3 * h; c++)
// printf(" "); //一个空格
for (int p = j; p > 0; p -= 3)
printf("* * "); //三个空格
printf("\n");
}
if (j % 3 == 0)
{
// for (int m = j; m < 3 * h; m++)
// printf(" ");
for (int c = j; c > 0; c -= 3)
printf("* * * "); //末尾一个空格,相邻之间一个
printf("\n");
}
}
for (int l = 1; l <= h; l++)
{
for (int c = 1; c <= 3* h +1; c++)
{
if (c == 3 * h)
printf("*");
else
printf(" "); //一个空格
}
printf("\n");
}
}
方法不唯一,但是个人以为这样比较容易思考和实现
创作不易,感谢观看
边栏推荐
猜你喜欢
随机推荐
Gradle的安装配置
三角形个数
1089 狼人杀-简单版 (20 分)
【按位取反,逻辑操作符,条件操作符,逗号表达式,下标引用,函数调用,结构体】操作符后续+表达式求值(上)
Djiango第四次培训笔记
flask 面试题 问题
CAD有生僻字如何打出来、如何提交软件相关问题或建议?
MySql数据库
对角矩阵(diagonal matrix)
接口和抽象
-最低分-
Ali cloud object storage oss private barrels to generate links
ss-3.工程重构
Shell conditional statement judgment
数据分析 第一篇
Pr第四次培训笔记
Makefile语法
Exception (abnormal) and Error (error) difference analysis
Modelarts第一次培训
Install IIS services (Internet Information Services (Internet Information Services, abbreviated IIS, Internet Information Services)