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

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

二.两个圣诞树


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


 


相关文章
|
8月前
|
算法
算法刷题(二十二):宝石与石头
算法刷题(二十二):宝石与石头
79 0
|
测试技术 索引 Cloud Native
【刷题日记】120. 三角形最小路径和
本次刷题日记的第 38 篇,力扣题为:120. 三角形最小路径和 ,中等
《蓝桥杯每日一题》递推·AcWing 3777. 砖块
《蓝桥杯每日一题》递推·AcWing 3777. 砖块
83 0
|
算法 C++
acwing蓝桥杯 - 数学知识【上】
acwing蓝桥杯 - 数学知识【上】
102 0
|
存储
剑指Offer - 面试题14:剪绳子
剑指Offer - 面试题14:剪绳子
87 0
|
算法 测试技术
【五一创作】牛客网——有理算法
【五一创作】牛客网——有理算法
91 0
|
算法
【AcWing&&牛客】打表找规律
【AcWing&&牛客】打表找规律
94 0
|
机器学习/深度学习 人工智能
【寒假每日一题】AcWing 4509. 归一化处理
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 1、cmath头文件相关函数 2、cout大法
124 0
|
存储 算法 Java
代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独
代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独
代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独
|
机器学习/深度学习 算法