一.思路
1. 这个图案是7 * 7矩阵组成,由一个上三角形和下三角形图案组成,可以分成两个矩阵,其中上三角在4 * 7矩阵中,下三角在3 * 7矩阵中;
2. 4 * 7矩阵中 i = [0,1,2,3],j = [0,1,2,3,4,5,6];3 * 7矩阵中,i = [0,1,2],j = [0,1,2,3,4,5,6];
3. 图案是处于矩阵的中间,以j=3时为分界,对应数字矩阵,当i=0,j=3时,"星"的坐标为(0,3),当j!=3时,其他坐标上是"空格"。由此分析,我们只要在数字矩阵中相应的坐标输出"星",相应的坐标输出"空格"。
4. 程序中用2个for内外嵌套循环分别表示一个4 * 7矩阵和一个3 * 7矩阵,其中:
1. 4 * 7矩阵第一行中"空格"居多,我们以输出"空格"为主:
1. 当i = 0,j的取值在 j < 3 || j > 3时输出"空格"
2. 当i = 1,j的取值在 j < 2 || j > 4时输出"空格"
3. 可以得到表达式j < (3 - i) || j > (3 + i)
2. 3 * 7矩阵矩阵第一行中"星"居多,我们以输出"星"为主:
1. 当i = 0,j的取值在 0 < j < 6时输出"星"
2. 当i = 1,j的取值在 1 < j < 5时输出"星"
3. 可以得到表达式 j > i && j < 6 - i
二.代码实现
#include<stdio.h>
#include<stdlib.h>
/*
输出以下图案:
*
***
*****
*******
*****
***
*
*/
int main()
{
// 1.1 先输出上三角
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 7; j++)
{
if (j < (3 - i)|| j > (3 + i))
printf(" ");
else
printf("*");
}
printf("\n");
}
// 1.2 然后下三角
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 7; j++)
{
if (j > i && j < 6-i)
printf("*");
else printf(" ");
}
printf("\n");
}
system("pause");
return 0;
}
三.输出结果
四.总结
类似该问题都是在一个数字矩阵中显示,将矩阵中图案所在坐标输出,就得到我们所要的图案。