使用嵌套循环在C中打印星形('*')钻石?

Mic*_*_19 0 c loops for-loop nested

当用户为钻石输入5时,我希望能够打印出这样的钻石.但也适用于任何奇数且大于0的值.

在此输入图像描述

我有一个代码,用于为用户输入5制作钻石,但不适用于所有奇数输入..

 half = (size/2)+1;

 for (a=1; a <=  half ; a++) /*top to mid row of diamond*/
   {
     for (b=a; b<half;b++)
       {
     printf(" ");
       }
     for (c= size -2* a; c <=  half; c++)
       {
     printf("*");
       } 
      printf("\n");
   }
 for (a = 1; a < half;a++)
   {
     for (b = a; b>0;b--)
       {
     printf(" ");
       }
     for (c = size-2*a; c >0 ;c--)
       {
     printf("*");
       }
     printf("\n");
   }


  return 0;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.谢谢.

麦克风

小智 5

这里有两件事:

  1. 缩进更改(-1到"mid","+1"后面)

  2. 星数变化(+2到"中",-2"后")

现在,这可以通过两个循环完成(一个用于顶部到"mid"和一个"after"),但是值也可以用一点数学来确定.让我们探讨一下 :-)

这是数字:

        s(spaces)  x(stars) n(line number)
__X          2        1        0
_XXX         1        3        1
XXXXXX       0        5        2
_XXX         1        3        3
__X          2        1        4

首先要注意的s是关于"mid"的对称性:

  • s = abs(2 - n)

然后这xs(如上面的增量中所述的2)相关:

  • x = 5 - (s*2)= 5 - (abs(2 - n)*2)

希望能给出一些见解!

  • 谢谢!这很有帮助! (2认同)