首先先说一下这种题的大致思路 说实话 就是数学题 只是用c的方法实现而已
其实我也不知道这种题练会了有没有意义 有什么意义 但是之前看网课的时候老师教了 现在就简单复习一下
* 5 1 1
*** 4 3 2
***** 3 5 3
******* 2 7 4
********* 1 9
*********** 0 11
********* 下半 : 星9 7 5 3 1 (line:6)
******* 下班 : 空1 2 3 4 5 (line:6)
*****
***
*
最笨最有效的方法就是先把每行的行号打出来 *号个数打出来 空格数打出来 然后找行号和另外两个值的关系
代码:
int main()
{
int line = 0;
scanf("%d", &line);
//打印上半部分
for (int i = 0; i < line; i++)
{
//打印' '
for (int j = 0; j < line-1-i; j++)
{
printf(" ");
}
//打印'*'
for (int j = 0; j < i*2+1; j++)
{
printf("*");
}
printf("\n");
}
//下半部分
for (int i = 0; i < line-1; i++)
{
//
for (int j = 0; j <= i; j++)
{
printf(" ");
}
// *
for (int j = 0; j <2*(line-1-i)-1 ; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
说实话 这个挺好找的 这个关系
现假设line为6 line指上半部分的行号 下半部分比上半部分少1
空星 行 (line=6)
* 5 1 1
*** 4 3 2
***** 3 5 3
******* 2 7 4
********* 1 9
*********** 0 11
********* 下半 : 星9 7 5 3 1 (line:6) 即2*(line-1-i)-1 这里i是逐次减一的 为的是每次都少2
******* 下半 : 空1 2 3 4 5 (line:6) 即每行多1 好理解
*****
***
*
不行了 突然说不下去了 反正我理解了 就这吧 反正没人看 多算一算关系就行了
多试一试也行