#学习思路#
打印菱形流程分两半
假设n是5,那么上半部分是3,下半部分就是2。
我们打印上半部分的菱形的时候,上半部分的菱形打印次数是比下半部分菱形多一次的,而下半部分的菱形比上半部分少一次。
我们的总思路为:先打印上半部分菱形——>找到行与空格菱形之间的关系——>打印下半部分菱形——>找到下半部分行与空格的关系——>完成菱形
int main()
{
int n ;
scanf_s("%d", &n);
for (int i=1;i<=(n+1) /2; i++)
{
for ( int j = 1; j <=(n+1)/2-i; j++)
{
printf(" ");
}
for ( int k = 1; k <= 2*i-1; k++)
{
printf("*");
}printf("\n");
}
打印菱形之前首先要有一个思路,那就是我们先找出他们之间存在什么联系:
首先我们自定义一个n,是我们想要的几阶菱形,然后我们从键盘输入。
这里为了解释清楚就先把n定义为5来讲。
因为需要循环打印空格和菱形,所以我们就第一时间想到的是循环,先写一个for循环,然后再在循环里面嵌套两个循环,一个是打印空格,一个打印星号,记住空格后面是紧跟着星号的。
首先我们把外层循环定义为i,它管理这个整体的循环次数,然后内层我们打印空格为j,打印星号为k。
接下来找他们之间有什么关系:
找到他们之间相互的关系之后,那个关系就是打印空格和星号的关键点!!!
但是特别记住,外层循环一次内层可不只是循环一次,当时我没注意到这一点想了九个小时!
记住,外层第一次循环进入的时候,遵循的是第一个内循环的规律,就是外循环进入第一次,内循环循环完他的条件才会进入第二个内循环,当时因为这个搞混了想了好长时间,大家避避坑,把规律找到这个题是很简单的!!!
这就是菱形的下半部分了,直到找到前半部分的规律,后半部分就很简单了。
for (int i=1;i<=(n+1)/2-1;i++)
{
for (int j = 1; j <= i; j++)
{
printf(" ");
}
for (int k = 1; k <= n-2*i; k++)
{
printf("*");
}printf("\n");
}return 0;
}
哪里不明白可以在评论区说出来,因为我想这个挺长时间的,所以哪里有问题一点竭尽全力帮助!!
下图我整理好的代码及思路,希望可以帮助到大家!!