牛客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.rhkb.cn/news/221736.html

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

相关文章

pg课堂笔记-新版本特性和版本升级

为什么要升级 版本特性:一年一个大版本,三个月一个小版本 9.4支持 jsonb ​ 9.6 支持并行 ​ 10 支持逻辑复制和声明分区 ​ 11 支持jit 、存储过程 ​ 14 引入 idle_session_timeout ​ 15 逻辑复制有大幅度提升 ​ 16 支持standby logical replication ,并行回放, 以及 …

单片机LCD1602

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、LCD1602是什么&#xff1f;二、LCD1602 原理三、显示一个字符四、如何显示四位数五、参考历程六、封装成一个显示 字符和一个显示任意四位数的函数总结 前言…

HTML输出特殊字符详细方法

以下是部分特殊字符代码表&#xff0c;它们的完整应用代码格式为&#xff1a;&#;用下面的四位数字替换&#xff0c;将得到对应的符号。&#xff08;注意&#xff1a;应用这些代码&#xff0c;编辑器应该切换到HTML模式&#xff09; ☏260f ☎260e ☺263a ☻263b ☼263c ☽…

Linux开发工具——vim篇

vim开发工具的使用 文章目录 vim开发工具的使用认识vimvim常用三种模式vim正常模式命令集模式切换移动光标删除文字赋值替换撤销上一次操作更改跳到指定的行 vim末行模式命令集列出行号跳到文件中的某一行&#xff1a;保存文件离开vim查找字符&#xff1a; 总结题外话&#xff…

@德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?

德人合科技 | 天锐绿盾加密软件是一款全面保障企业电脑数据和安全使用的加密软件 PC端访问地址&#xff1a;www.drhchina.com 它的功能包括但不限于&#xff1a; 实时操作日志&#xff1a;可以实时详细地记录所有终端的操作日志&#xff0c;包括终端上窗口标题的变换、程序的…

【C#】TimeSpan

文章目录 概述属性时间计算拓展来源 概述 TimeSpan结构&#xff1a;表示一个时间间隔。 它含有以下四个构造函数&#xff1a; TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数。&#xff08;DateTime.Tick:是计算机的一个计时周期&#xff0c;单位是一百纳秒&…

通过https协议访问Tomcat部署并使用Shiro认证的应用跳转登到录页时协议变为http的问题

问题描述&#xff1a; 在最近的一个项目中&#xff0c;有一个存在较久&#xff0c;并且只在内部城域网可访问的一个使用Shiro框架进行安全管理的Java应用&#xff0c;该应用部署在Tomcat服务器上。起初&#xff0c;应用程序可以通过HTTP协议访问&#xff0c;一切运行都没…

微信小程序-选择和分割打开地图选择位置的信息

一、 前言 废话不多说&#xff0c;单刀直入。 本文要实现的功能是微信小程序中打开地图选择位置&#xff0c;以及将返回的位置信息分割。 例如返回的位置信息是&#xff1a;广东省深圳市龙岗区xxxxx小区 分割后变成&#xff1a; {province: "广东省",city: "深…

CComboBoxEx

很久以前写的一段代码感觉比较有意思记录下 一、前面是bmp的图像后面是文字 BOOL bRe Img.Create(IDB_BITMAP_Chamfer, 50, 8, RGB(255, 0, 0));mComBoxChamfer.SetImageList(&Img);COMBOBOXEXITEM cbexItem;cbexItem.mask CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_O…

C语言-> 文件操作(函数满屏)

系列文章目录 前言 ✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青_C语言,数据结构,函数-CSDN博客 目的&#xff1a;学习文件操作&#xff0c;即…

【TI毫米波雷达】上电时序、串口回环BUG及SOP模式不正常工作的解决方案(LP87524电源PMIC芯片的BUCK供电时序配置)

【TI毫米波雷达】雷达上电时序及SOP模式不正常工作的解决方案&#xff08;LP87524电源PMIC芯片的BUCK供电时序配置&#xff09; 文章目录 上电时序上电以后的雷达串口回环问题延迟上电时序LP87524电源PMIC芯片的BUCK供电时序LP87524电源PMIC芯片的BUCK默认供电输出附录&#x…

Java中四种引用类型(强、软、弱、虚)

目录 引言 强引用&#xff08;Strong References&#xff09; 软引用&#xff08;Soft References&#xff09; 弱引用&#xff08;Weak References&#xff09; 虚引用&#xff08;Phantom References&#xff09; 引用类型的应用场景 总结 引言 Java中的引用类型是管理…

SpringCloud微服务 【实用篇】| Docker镜像、容器、数据卷操作

目录 一&#xff1a;Docker基本操作 1. 镜像操作 镜像相关命令 2. 容器操作 容器相关命令 3. 数据卷&#xff08;容器数据管理&#xff09; 数据卷 操作数据卷 挂载数据卷 挂载的方式区别 前些天突然发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0…

程序员的23大IONIO面试问题及答案

文章目录 1. 什么是IO流&#xff1f;2.java中有几种类型的流&#xff1f;3.字节流和字符流哪个好&#xff1f;怎么选择&#xff1f;4.读取数据量大的文件时&#xff0c;速度会很慢&#xff0c;如何选择流&#xff1f;5. IO模型有几种&#xff1f;6.阻塞IO &#xff08;blocking…

使用Python爬取GooglePlay并从复杂的自定义数据结构中实现解析

文章目录 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》&#xff0c;对分布…

天猫数据分析(天猫查数据工具):2023年天猫平台假发行业市场销售数据分析报告

如今&#xff0c;由于人们工作和生活的压力较大&#xff0c;居民脱发问题严重&#xff0c;且脱发群体倾向于80后和90后&#xff0c;逐渐向低龄化发展。除脱发外&#xff0c;在颜值经济的背景下&#xff0c;人们越来越注重外貌和形象&#xff0c;假发作为一种改善发型的工具&…

el-table设置默认选中报错_this.$refs.singleTable.toggleAllSelection is not a function

直接使用以下的方法&#xff0c;报错信息是_this.$refs.singleTable.toggleAllSelection is not a function this.$refs.singleTable.toggleAllSelection()看了网上的解决方法&#xff0c;加了this.$nextTick,代码如下&#xff0c;但还是报错Error in nextTick: "TypeErr…

文件夹数据同步工具 Sync Folders Pro mac支持选项

Sync Folders Pro for Mac 是一款功能强大的文件夹同步工具&#xff0c;旨在帮助用户在 Mac 计算机和移动设备之间创建双向同步。这款软件支持各种文件系统和设备&#xff0c;如 iPhone&#xff0c;iPad&#xff0c;iPod&#xff0c;Android 等。通过这款软件&#xff0c;用户可…

2023 英特尔On技术创新大会直播 | 边云协同加速 AI 解决方案商业化落地

目录 前言边云协同时代背景边缘人工智能边缘挑战英特尔边云协同的创新成果最后 前言 最近观看了英特尔On技术创新大会直播&#xff0c;学到了挺多知识&#xff0c;其中对英特尔高级首席 AI 工程张宇博士讲解的边云协同加速 AI 解决方案商业化落地特别感兴趣。张宇博士讲解了英…

macOS 安装 oh-my-zsh 后 node 报错 command not found : node

最近为了让终端中显示 git 分支的名称&#xff0c;安装了 oh-my-zsh &#xff0c;安装之后呢&#xff0c;我原先安装的 Volta、 node 都没法用了&#xff0c;报错如下&#xff1a; 这时候粗略判断应该是系统变量出了问题&#xff0c;oh-my-zsh 的变量文件是 ~/.zshrc&#xff0…