输出以下图案: ​ \* ​ \*\*\* \*\*\*\*\* \*\*\*\*\*\*\* \*\*\*\*\* ​ \*\*\* ​ \*

输出以下图案:

​ *

​ ***

*****

*******

*****

​ ***

​ *

答案解析:

该题目需要关心当前行对应的从最左边到第一颗*的空格数量以及星星数量。将该题分为两个部分,前面4行和后面3行来进行拆分。

前4行中:

第一行:行号为0, 空格数为3,星星数量为1;

第二行:行号为1, 空格数为2, 星星数量为3;

第三行:行号为2, 空格数为1, 星星数量为5;

第四行:行号为3, 空格数为0,星星数量为7;

则我们可以推出两组关系,即行号和空格数量关系为:空格数 = 3 - 行号 。行号与星星的关系为:星星数 = 2 * 行号 + 1

后三行中:

第一行:行号为0,空格数为1,星星数量为5;

第二行:行号为1, 空格数为2, 星星数量为3;

第三行:行号为2, 空格数为3,星星数量为1;

则我们推出两组关系,即行号与数量的关系:空格数 = 行号 + 1。行号与星星的关系:星星数 = 7 - 2 * (行号+1)

基于上面的关系,我们写出如下代码:

代码示例:

#include <stdio.h>

int main()
{
	int cur_row, space_count, start_count;
	//输出前4行内容
	for (cur_row = 0; cur_row < 4; cur_row++)
	{
		//计算当前行空格数量,并且进行打印
		for (space_count = 3 - cur_row; space_count > 0; space_count--)
		{
			printf(" ");
		}
		//计算当前行*数量,并且进行打印
		for (start_count = 2 * cur_row + 1; start_count > 0; start_count--)
		{
			printf("*");
		}
		printf("\n") ;
	}
	//输出后三行
	for (cur_row = 0; cur_row < 3; cur_row++)
	{
		for (space_count = cur_row + 1; space_count > 0; space_count--)
		{
			printf(" ");
		}

		for (start_count = 7 - 2 * (cur_row + 1); start_count > 0; start_count--)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

运行截图:

输出以下图案:  ​      *  ​    ***    *****  *******    *****  ​    ***  ​      *

posted @ 2020-09-13 12:22  张震新  阅读(406)  评论(0编辑  收藏  举报