我希望当用户输入 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;
}
任何帮助将不胜感激。谢谢。
Mike
这里发生了两件事:
缩进更改(-1 到“中间”,+1“之后”)
星星数量变化(+2 到“中间”,-2“之后”)
现在,这可以通过两个循环来完成(一个用于顶部到“中间”,一个用于“之后”),但也可以通过一些数学来确定这些值。让我们来探索一下that :-)
以下是数字:
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”对称:
然后那个x
与s
(按上面 delta 中所述的 2 计算):
- x = 5 - (s * 2) = 5 - (abs(2 - n) * 2)
希望能提供一些见解!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)