二.两个圣诞树
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; }
可爱的圣诞树🎄:
友友们不妨尝试一下送给自己的女朋友哦🌹。
2.超级圣诞树
描述
今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。
输入描述:输入圣诞树的大小 n n
1≤n≤81≤n≤8
输出描述:输出对应的圣诞树
输入:1
输入:2
输入:3
输入:4
这道题目笔者苦思冥想了两个小时也是没有头绪,只是发现每一个圣诞树都是以上一个圣诞树为基准,三个再重新为一个整体。也是求助了大神才得以解决。分享给大家,大神是真的厉害👍。其实也是我思维局限于上个普通圣诞树,一直想着通过打印或者坐标来解决,然而无果。大神的想法是建立一个二维数组,通过数字替换图形,然后循环。其中清空又重建的思维真的厉害。
上代码:
#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; }
友友们也可以实现送给自己的女朋友哦🌹。这些题目都是牛客网上初阶的题目,较为简单,大家可以点题目就有链接哦。