牛客刷题(矩阵加圣诞树)(下)

简介: 牛客刷题(矩阵加圣诞树)

二.两个圣诞树


1.普通圣诞树


描述

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

输入描述:输入圣诞树的高度h,1<= h <= 1001<=h<=100

输出描述:输出对应的圣诞树

示例1

输入:

1

输出:

 *  

* *

* * *

 *

示例2

输入:

2

输出:

    *    

   * *    

  * * *  

 *     *  

* *   * *

* * * * * *

    *

    *

这道题目,比较需要注意的是空格,然后需要选取好对象,先抛去最后的小尾巴,前面我们就可以发现,它的基本最小组成单元:


 *  

* *

* * *

 *


以此为基准进行扩张。(补充说明为什么要以此为基本单元,这一点比较细微,笔者也是观察试验了许久才发现,在笔者百思不得敲代码时发现每个小三角形的三行竟然都是一样的,连空格都一样,如果没有这个发现,这道题相当难做):


上代码:

#include<stdio.h>
int main()
{
    //做三个特殊处理即可
    int intm,num,i;
    scanf("%d",&intm);
    num=intm*3;
    //如果进行3*intm次循环实在繁琐,所以进行intm次循环,但是要注意三行处理
    for(i=1;i<=intm;i++)
    {
        //注意归并
        for(int m=1;m<=num-1;m++)
        {
            printf(" ");
        }
        for(int n=1;n<=i;n++)
        {
            printf("*     ");
        }
        printf("\n");
        for(int m=1;m<=num-2;m++)
        {
            printf(" ");
        }
        for(int n=1;n<=i;n++)
        {
            printf("* *   ");
        }
        printf("\n");
        for(int m=1;m<=num-3;m++)
        {
            printf(" ");
        }
        for(int n=1;n<=i;n++)
        {
            printf("* * * ");
        }
        printf("\n");
        num=num-3;
    }
    for(int k=1;k<=intm;k++)
    {
        for(int j=1;j<=(6*intm-1)/2;j++)
        {
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}


可爱的圣诞树🎄:


1669212247041.jpg


友友们不妨尝试一下送给自己的女朋友哦🌹。


2.超级圣诞树


描述

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

输入描述:输入圣诞树的大小 n n

1≤n≤81≤n≤8

输出描述:输出对应的圣诞树


输入:1


1669212266703.jpg


输入:2


1669212275968.jpg


输入:3


1669212282109.jpg


输入:4


1669212292445.jpg


这道题目笔者苦思冥想了两个小时也是没有头绪,只是发现每一个圣诞树都是以上一个圣诞树为基准,三个再重新为一个整体。也是求助了大神才得以解决。分享给大家,大神是真的厉害👍。其实也是我思维局限于上个普通圣诞树,一直想着通过打印或者坐标来解决,然而无果。大神的想法是建立一个二维数组,通过数字替换图形,然后循环。其中清空又重建的思维真的厉害。


上代码:


#include<stdio.h>
int main()
{
    int arr[600][800]={{0,0,1,0,0},{0,1,0,1,0},{1,0,1,0,1}};//由0代表' ',1代表'*'
    int n,i,j,k,length=3,width=5;
    scanf("%d",&n);
    //由小得到大
    for(i=2;i<=n;i++)
    {
        //搬运
        for(j=length;j<length*2;j++)
        {
            for(k=0;k<width;k++)
            {
                arr[j][k]=arr[j-length][k];//制作左下角三角形
                arr[j][k+width+1]=arr[j][k];//制作右下角
            }
        }
        //清空原来三角形,清空起初三角形是因为这个三角形不在中央,而在左边,为了放到中间而如此。
        for(j=0;j<length;j++)
        {
            for(k=0;k<width;k++)
            {
                arr[j][k]=0;//清空
            }
        }
        //把三角形放到中央
        for(j=0;j<length;j++)
        {
            for(k=(width+1)/2;k<width+(width+1)/2;k++)
            {
                arr[j][k]=arr[j+length][k-(width+1)/2];
            }
        }
        //变化的数组,需要扩大,以变大后的三角形为新的初始三角形进行变化。当真绝妙。
        length*=2;width=width*2+1;
    }
    for (i = 0; i < length; i++) 
    {//打印圣诞树
        for (j = 0; j < width; j++) 
        {
            if (arr[i][j] == 0) 
            { 
                printf(" "); 
            }
            else 
            { 
                printf("*"); 
            }
        }
        printf("\n");
    }
    for (i = 0; i < n; i++) 
    {//打印树干
        for (j = 0; j < width / 2; j++) 
        { 
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}


友友们也可以实现送给自己的女朋友哦🌹。这些题目都是牛客网上初阶的题目,较为简单,大家可以点题目就有链接哦。


1669212314294.jpg


 


相关文章
|
Ubuntu Java 测试技术
【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测
【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测
450 1
|
小程序 网络安全 Windows
swoole(二)ws与wss的区别
关于ws与wss的区别这里简单的说一下我目前的见解。 如果你有更多的见解欢迎在下方留言讨论。 最简单的理解就是: 服务器上服务端用的是:websocket协议(支持客户端的ws访问) 服务器上服务端用的是:websocket协议+TLS(支持客户端的wss访问) 客户端上用的是: ws协议或者wss协议 Wss与ws其实就和http与https的关系,wss需要验证域名证书,ws不需要验证域名证书。 这个其实都不重要。我们在开发的时候关系不是很大。 下边的才是我要说的重点: Ws链接可以使用IP+端口号的形式访问。 Wss链接只能使用域名的形式访问,因为服务器端需要通过域名来找对应的ssl证书
1137 0
|
计算机视觉
OpenCV-计算自然对数cv::log
OpenCV-计算自然对数cv::log
263 0
|
11月前
|
机器学习/深度学习 算法
深度学习笔记(四):神经网络之链式法则详解
这篇文章详细解释了链式法则在神经网络优化中的作用,说明了如何通过引入中间变量简化复杂函数的微分计算,并通过实例展示了链式法则在反向传播算法中的应用。
460 0
深度学习笔记(四):神经网络之链式法则详解
|
11月前
|
Java
【编程基础知识】switch case可以用string(千万注意要加上break)
本文详细探讨了Java中`switch`语句使用字符串时的注意事项,重点讲解了`break`语句的重要性。通过代码示例和流程图,帮助读者正确理解和使用`switch`语句,避免常见的编程错误。
581 4
|
10月前
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
|
11月前
|
测试技术 uml
#如何画好架构图:7种常用类型与示例
【10月更文挑战第12天】 架构图是展示系统结构和组件之间关系的图形表示,它对于理解系统的组织和设计至关重要。在不同的上下文中,架构图的类型和细节会有所不同。以下是7种常用的架构图类型及其示例:
909 2
|
存储 关系型数据库 MySQL
分布式事物【悲观锁、乐观锁、读锁、写锁、间隙锁、临键锁 、 表锁、行锁、页面锁、 如何避免死锁】(二)-全面详解(学习总结---从入门到深化)
分布式事物【悲观锁、乐观锁、读锁、写锁、间隙锁、临键锁 、 表锁、行锁、页面锁、 如何避免死锁】(二)-全面详解(学习总结---从入门到深化)
712 0
|
10月前
|
XML JSON Kubernetes
什么是 YAML?:一种简洁高效的数据序列化格式
什么是 YAML?:一种简洁高效的数据序列化格式
1372 0
|
11月前
|
人工智能 算法 C++
一篇带你速通前缀和算法(C/C++)
一篇带你速通前缀和算法(C/C++)