本文主要是介绍打印圣诞树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目1
分析
1. 要打印这个圣诞树,无非就是打印树干与树冠这两个部分。
2. 要打印树干会发现非常容易,经过观察很容易发现规律。可以通过循环实现,每次循环的时候先打印若干个空格,再紧接着打印一个星号即可。
3. 令人头疼的是这个树冠该怎么打印?这其实事实上相当于是在找规律。首先可以肯定的一点就是:肯定是得一行一行这么打印,那也就是说,肯定得是以循环的方式,树冠有多少行,那就意味着要循环多少次。
4. 然后打印树冠的每一行的时候(就是单次循环),首先先打印空格,打印空格的个数也是有规律可循,这个不难。
5. 最为核心的问题在于这个星号的排列该怎么样子打印出来,这时候我想到了一个办法:不把单个星号看成一个整体,而是把六个字符合起来,看成一个整体。具体意义如下图
6. 这样子你会发现,第1.4.7...行的整体都是一样的,第2.6.8...行的整体都是一样的,第3.7. 9...行的整体都是一样的,因此可以得知,这个整体无非就是这三种样子,并且每一行用哪个整体的形式你去那一行是第几行决定。
7. 接下来要考虑的就是,在每一行的打印当中,那个整体到底要打印几次,这个也是很容易找到规律的。至此,树冠的规律已经被摸清楚了。
具体代码实现
#include <stdio.h>
int main()
{int h = 0;scanf("%d",&h);//打印树冠int i = 0;int j = 0;for (i = 0; i < 3 * h; i++){//打印空格for (j = 0; j < (3 * h - (i + 1)); j++){printf(" ");}//打印星号整体int k = i / 3 + 1;//计算循环"整体"的次数if (i % 3 == 0){for (j = 0; j < k; j++){printf("* ");}}else if (i % 3 == 1){for (j = 0; j < k; j++){printf("* * ");}}else{for (j = 0; j < k; j++){printf("* * * ");}}printf("\n");}//打印树干for (i = 0; i < h; i++){for (j = 0; j < (3 * h - 1); j++){printf(" ");}printf("*\n");}return 0;
}
经验总结
这种打印图形的题目,事实上其实就是根据平面图形找规律,一旦规律被发现,那么用计算机语言实现起来会很容易
这篇关于打印圣诞树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!