关于打印金字塔类型题目的总结与归纳

近日在完成程序设计作业的时候,总是会遇到一类打印“金字塔”类型的题目,经过一番认真的研究,我们对这种题目有了如下几点总结:

1.观察行列之间的关系

2.打印空格,图形和各种符号

3.循环的参数代表的含义

那么,让我们看几道C语言的金字塔打印题目吧

输入需要打印的行数,比如3 ,打印出来:

*

* *

* * *

本题的没有答应空格的过程,核心在于打印的行数和每行的*号个数,先看如下代码:

#include<stdio.h>
int main()
{
	int i, j, k;
	printf("请输入打印的行数\n");
	scanf_s("%d", &k);
	for (i = 1;i <= k;i++)//用k代表总行数,i表示在第i行
	{
		for (j = 1;j <= i;j++)//用j代表每一列打印的数
			printf("* ");
		printf("\n");
	}
	return 0;
}

 

 经过我们的观察,每一行打印的*数和每一行对应的行数相等,所以i<=j打印 *

那么,我们再来看看下面这道题:

输入需要打印的行数,比如3,打印出来:

    *

  * *

* * *

明显本题将上面那个题目的金字塔倒过来了,那么有什么不一样呢?

#include<stdio.h>
int main()
{
	int i, j, k;
	printf("请输入打印的行数\n");
	scanf_s("%d", &k);
	for (i = k;i >= 1;i--)
	{
		for (j = 1;j < i;j++)
		{
			printf(" ");
		}
		for (j = 0;j <= k - i;j++)
		{
			printf("*");
		}
		printf("\n");
		
	}
	return 0;
}

 这个显然也是存在规律的,仍然用i表示第多少行,显然 空白数加上打印数是等于总行数的,并且空白数是从最大行数减到0的,所以我们把这些想法换成循环,仍然让i作为行数遍历到每一行,然后根据规律打印每一行的符号。

形如

    *

  *   *

*   *    * 都是上面进行空格数量变化的结果

那么我们如何打印

     *

  *  *  *

* *  * *   *(对齐的有点问题,但是是个对称的1,3,5三角形)

本题其实,就是将形式2的另外一部分打印了出来,我们只需要在后面加上一个递减的代码即可 

#include<stdio.h>
int main()
{
	int i, j, k;
	printf("请输入打印的行数\n");
	scanf_s("%d", &k);
	for (i = k;i >= 1;i--)
	{
		for (j = 1;j < i;j++)
		{
			printf(" ");
		}
		for (j = 0;j <= k - i;j++)
		{
			printf("*");
		}
		for (j = k - i;j > 0;j--)
		{
			printf("*");
		}
		printf("\n");
		
	}
	return 0;
}

这样就可以打印成功了!

谢谢大家。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值