牛客BC115 超级圣诞树

万众瞩目

在上一篇我们介绍了一个圣诞树的打印,而这道题与上次不同的是他的基本单位是一直在变的

我建议先把上一个搞懂在写这道题这个。

牛客网BC114 圣诞树-CSDN博客

ok那么正文开始

题目如下

今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。

输入描述:

输入圣诞树的大小为n

1≤n≤8

输出描述:

输出对应的圣诞树

样例一:

输入:1
输出:** *
* * **

样例二:

输入:2
输出:** ** * **     ** *   * *
* * * * * ***

样例三:

输入:3
输出:** ** * **     ** *   * ** * * * * **           ** *         * ** * *       * * **     *     *     ** *   * *   * *   * *
* * * * * * * * * * * ****

样例四:

输入:4
输出:** ** * **     ** *   * ** * * * * **           ** *         * ** * *       * * **     *     *     ** *   * *   * *   * ** * * * * * * * * * * **                       ** *                     * ** * *                   * * **     *                 *     ** *   * *               * *   * ** * * * * *             * * * * * **           *           *           ** *         * *         * *         * ** * *       * * *       * * *       * * **     *     *     *     *     *     *     ** *   * *   * *   * *   * *   * *   * *   * *
* * * * * * * * * * * * * * * * * * * * * * * *****

代码解析:

1.与上次相比我们的基本单位是一直变化的,也就是输入不同的数字,我们要先找到这个基本单位才行

2.可以发现输入n对应的基本单位就是n-1对应的图,所以可以先用循环找到基本单位

3.再找基本单位后要多次使用它,所以要先把基本单位存起来方便使用,我用的方法是二维数组。

ok有了以上的基本思路就可以开始敲代码了。

注意:一个基本变量变为下一个基本变量的过程如下

一.找基本单位

    int row = 3, column = 6;//基本单位的行列int arr[100][200] = { {' ',' ','*',' ',' ',' '},{' ','*',' ','*',' ',' ' },{'*',' ','*',' ','*',' '} };//存一个最小的基本变量int count;scanf("%d", &count);for (int i = 1; i < count; i++)//我们知道输入n对应的图形其实也是n+1的基本单位所以我这个循环可以直接得到我们要找的图形{for (int j = row, J = 0; j < 2 * row; j++, J++)for (int k = 0; k < column; k++){arr[j][k] = arr[J][k];//这个是左下arr[j][k + column] = arr[J][k];//这个是右下arr[J][k] = '\0';这个是消除原本储存的基本单位,}
//可以发现n的基本单位是由三个n-1的基本单位构成的,分别位于左上,右下,中上for (int j = 0, J = row; j < row; j++, J++){for (int k = 0; k < column; k++)arr[j][k + column / 2] = arr[J][k];//这个是中上}row *= 2;//基本单位变大,记录的行列也要变化column *= 2;}

二.打印树

二维数组存储了我们的目标图形,直接打印,但要注意,我们要把数组对应元素是'\0'的打印为空格,不然你的图形就会缺一块少一块的,我的处理方法是个三目操作符来判断。

    for (int i = 0; i < row; i++){for (int j = 0; j < column; j++)printf("%c", arr[i][j] == '\0' ? ' ' : arr[i][j]);printf("\n");}

三.打印树根

打印树根就简单了,只要直到树根在中间就行。

    for (int i = 0; i < count; i++){for (int j = 0; j < column / 2 - 1; j++)printf(" ");printf("*\n");}

答案如下

#include<stdio.h>
int main()
{int row = 3, column = 6;int arr[400][1000] = { {' ',' ','*',' ',' ',' '},{' ','*',' ','*',' ',' ' },{'*',' ','*',' ','*',' '} };int count;scanf("%d", &count);for (int i = 1; i < count; i++){for (int j = row, J = 0; j < 2 * row; j++, J++)for (int k = 0; k < column; k++){arr[j][k] = arr[J][k];arr[j][k + column] = arr[J][k];arr[J][k] = '\0';}for (int j = 0, J = row; j < row; j++, J++){for (int k = 0; k < column; k++)arr[j][k + column / 2] = arr[J][k];}row *= 2;column *= 2;}for (int i = 0; i < row; i++){for (int j = 0; j < column; j++)printf("%c", arr[i][j] == '\0' ? ' ' : arr[i][j]);printf("\n");}for (int i = 0; i < count; i++){for (int j = 0; j < column / 2 - 1; j++)printf(" ");printf("*\n");}return 0;
}

但是!!!!!!!

这个写法有个问题是

由于我们把要打印的n对应的图形存了进去使得内存消耗很大,下图牛客上给的

所以我们还有一种思路,就是找到n的基本单位,然后用类似于上一道题(就上一篇博客)的方法写出来

解析写在注释里了

#include<stdio.h>
int main()
{int row = 3, column = 6;int arr[200][400] = { {' ',' ','*',' ',' ',' '},{' ','*',' ','*',' ',' ' },{'*',' ','*',' ','*',' '} };int count;scanf("%d", &count);if (count > 1){for (int i = 1; i < count - 1; i++)//这里是count-1说明找的是n的基本单位,而不是n本身{for (int j = row, J = 0; j < 2 * row; j++, J++)for (int k = 0; k < column; k++){arr[j][k] = arr[J][k];arr[j][k + column] = arr[J][k];arr[J][k] = '\0';}for (int j = 0, J = row; j < row; j++, J++){for (int k = 0; k < column; k++)arr[j][k + column / 2] = arr[J][k];}row *= 2;column *= 2;}
//这些找基本单位过程与上一个方法一样,for (int I = 0; I < row; I++){for (int i = 0; i < column / 2; i++)printf(" ");for (int i = 0; i < column; i++)printf("%c", arr[I][i] == '\0' ? ' ' : arr[I][i]);printf("\n");}
//可以发现要打印的图形都可以分为上下两部分
//这个是上面的,需要先打空格for (int I = 0; I < row; I++){for (int i = 0; i < column; i++)printf("%c", arr[I][i] == '\0' ? ' ' : arr[I][i]);for (int i = 0; i < column; i++)printf("%c", arr[I][i] == '\0' ? ' ' : arr[I][i]);printf("\n");}
//这个是下面的两个基本单位构成的,不用先打空格,而且由于是两个,所以里面放了两个for循环for (int i = 0; i < count; i++){for (int j = 0; j < column - 1; j++)printf(" ");printf("*\n");}
//打印树根}else//此方法需要将n=1设置为特例,因为找不到他的基本单位printf("  *\n * * \n* * *\n  *");return 0;
}

很明显占用内存小了很多

总结

ok,那么牛客上两道打印圣诞树的题的就完成了,看完记得的自己动手试试瞧瞧代码哦

感觉有用的话就点个赞支持一下吧,谢谢啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 通过代码将一张大图切成多个小图的方法

在Unity 中要通过代码将一张贴图切割成多张小图&#xff0c;可以使用以下方法&#xff1a; /// <summary>/// 把一张图片切割成多张使用/// </summary>/// <param name"texture">原图</param>/// <param name"rows">切割的行…

[DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案

[网络故障] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案 问题描述 最近&#xff0c;我在使用CSDN插件浏览 MOOC 网站时&#xff0c;遇到了一些网络故障。具体表现为&#xff1a; MOOC 中国大学慕课网&#xff1a;www.icourse163.org点击CSDN插件首页的 MOOC&#xff08…

VSCode调试Vue项目

前言 代码在某个平台运行时&#xff0c;会将运行时的状态通过某种方式暴露出来。这些状态信息可以通过某种方式传递给开发工具&#xff0c;以便进行UI的展示和交互。这样的交互可以辅助开发者排查问题、梳理流程&#xff0c;并更好地了解代码的运行状态。这就是我们通常所说的调…

Excel如何将行的值转换为列值?

问题:Excel如何将行的值转换为列值?(如图左表变成右表) 1.用 SUMIFS(求和区域, 条件区域1, 条件1, [条件区域2, 条件2], ...)函数 比如:=SUMIFS($C$2:$C$8,$A$2:$A$8,H3,$B$2:$B$8,"快车") 2.直接用简单的透视表 (1)随机点击目标目标表格任何位置,点击插入…

C语言—每日选择题—Day56

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 以下叙述中正确的是&#xff08;&#xff09; A&#xff1a;\0 表示字符 0 B&#xff1a;"a" 表示一个字符常量 C&#xff1a;表…

(企业 / 公司项目)Java如何打印漂亮的日志?

启动类 首先在idea创建一个项目这里就不演示了&#xff0c;直接看demo 找到项目的启动类&#xff0c;首先把启动类日志打印基本信息&#xff0c;这样就不用找来找去找不到地址以及端口 主要作用就是启动一个Spring Boot应用程序&#xff0c;并获取程序的运行环境。首先创建一…

javaSE学习-4-类和对象

1. 面向对象的初步认知 1.1 什么是面向对象 面向对象编程&#xff08;OOP&#xff09;是一种程序设计范式&#xff0c;它将程序中的数据和操作数据的方法封装到对象中。在面向对象的世界里&#xff0c;一切都被视为对象&#xff0c;这些对象可以拥有数据&#xff08;成员变量&…

大数据机器学习:从理论到实战,探索学习率的调整策略

大数据机器学习&#xff1a;从理论到实战&#xff0c;探索学习率的调整策略 全文目录 大数据机器学习&#xff1a;从理论到实战&#xff0c;探索学习率的调整策略一、引言二、学习率基础定义与解释学习率与梯度下降学习率对模型性能的影响 三、学习率调整策略常量学习率时间衰减…

《PySpark大数据分析实战》-16.云服务模式Databricks介绍运行案例

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

【大数据面试】Flink面试题附答案

目录 ✅Flink介绍、特点、应用场景 ✅Flink与Spark Streaming的区别 ✅Flink有哪些部署模式 ✅Flink架构 ✅怎么设置并行度&#xff1f; ✅什么是算子链&#xff1f; ✅什么是任务槽&#xff08;Task Slots&#xff09;&#xff1f; ✅任务槽和并行度的关系 ✅Flink作…

TOPCON拓普康SR-3AR亮度计

特征 &#xffed; 分光测光方式下的高速度、高精度值测定。 &#xffed; 无需使用辅助镜&#xff0c;也能实现细微面、低亮度领域的高精度测定。 &#xffed; 电动切换测定角(2/1/0.2/0.1)。 &#xffed; 高精度测定频闪光源&#xff08;搭载同步测定功能、积分时间延期…

uint29传输格式

前言 不知道谁想出来的。 反正我是想不到。 我看网上也没人讲这个。 写篇博客帮一下素未谋面的网友。 uint29 本质上是网络传输的时候&#xff0c;借用至多4字节Bytes&#xff0c;表达29位的无符号整数。 读8位数字&#xff0c;判断小于128? 是的话&#xff0c;返回末7位…

App(Android)ICP备案号查询——————高仿微信

&#x1f604; 个人主页&#xff1a;✨拉莫帅-CSDN博客✨&#x1f914; 博文&#xff1a;132篇&#x1f525; 原创&#xff1a;130篇&#xff0c;转载&#xff1a;2篇&#x1f525; 总阅读量&#xff1a;388923❤️ 粉丝量&#xff1a;112&#x1f341; 感谢点赞和关注 &#x…

大数据时代,如何基于机密虚拟化技术构建数据安全的“基石”

云布道师 2023 年 10 月 31 日-11 月 2 日&#xff0c;2023 云栖大会在中国杭州云栖小镇举行&#xff0c;阿里云弹性计算产品专家唐湘华、阿里云高级安全专家刘煜堃、蚂蚁集团高级技术专家肖俊贤三位嘉宾在【云服务器 & 计算服务】专场中共同带来题为《大数据时代&#xf…

3-高可用-隔离术

隔离是指将系统或资源分割开&#xff0c;系统隔离是为了在系统发生故障时&#xff0c;能限定传播范围和影响范围&#xff0c;即发生故障后不会出现滚雪球效应&#xff0c;从而保证只有出问题的服务不可用&#xff0c;其他服务还是可用的。 比较多的隔离手段有线程隔离、进程隔…

Java--包,访问修饰符,多态数组,==和equals,hashcode,toString

包 同一个包里面不能有重复的类&#xff0c;不同的包可以有相同的类&#xff0c;包和包之间互不干涉。一个包下面有很多的类。 包的命名规则&#xff1a; 只能包含数字&#xff0c;字母&#xff0c;下划线&#xff0c;小圆点&#xff0c;但不能用数字开头&#xff0c;不能是关…

2_js运算符与流程控制语句

1. 运算符的应用 1.1 算数运算符 浮点数的精度问题 浮点数值的最高精度是17位小数&#xff0c;不要直接判断两个浮点数是否相等。 var result 0.1 0.2; // 结果不是 0.3&#xff0c;而是&#xff1a;0.30000000000000004 console.log(0.07 * 100); // 结果不是 7&#…

C++学习笔记(十五)

继承 继承是面向对象三大特性之一 有些类与类之间存在特殊的关系&#xff0c;例如下图中&#xff1a; 我们发现&#xff0c;定义这些类时&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。 这个时候我们就可以考虑利用继承的技术&#xff0c;减少重…

3 - Electron app BrowserWindow对象-关于窗口

优雅的打开应用~ 当加载缓慢&#xff0c;打开应用的一瞬间会出现白屏&#xff0c;以下方法可以解决 const mainWindow new BrowserWindow({ show: false }) mainWindow.once(ready-to-show, () > {mainWindow.show() }) 设置背景颜色 const win new BrowserWindow({ b…

MongoDB的原子操作findAndReplace、findOneAndDelete和deleteMany

本文主要介绍MongoDB的原子操作findAndReplace、findOneAndDelete和deleteMany。 目录 MongoDB的原子操作一、findAndReplace二、findOneAndDelete三、deleteMany MongoDB的原子操作 MongoDB的原子操作指的是在单个操作中对数据库的数据进行读取和修改&#xff0c;并确保操作是…