我们想要的是上图,可惜我们设计的时候是这样:
图片2
这是因为屏幕的(0,0)坐标在左上角,其坐标增长方向是x向右(不变),y轴向下增长。
所以我们想要的是图1,但是要按照图2进行线性规划。
我们高中学过线性规划,用线性规划会方便很多
可以得到:
y = -x + n
x >= 0
y >= 0
转化为代码就是必须同时满足以下三种条件
j>=0
&&
i>=0
&&
i
&&
代码:
#include
//j>=0 &&
i>=0 &&
i
int diamond(char c,int n)
{
int i,j;
int a,b;
for(i = 0; i <
n;i++)
{
for(j = 0;j <
n;j++)
{
a = i-j;
b = j+i;
if(j >= 0 &&
i >= 0 && i
< n - j)
printf("*");
}
printf("\n");
}
}
int main()
{
char c;
int n;
diamond('*',9);
return 0;
}
得到结果:
administrator@ubuntu:~/idea$
./a.out
*********
********
*******
******
*****
****
***
**
*
Tip:由于屏幕的左上角坐标是(0,0),x是向右递增,y是向下递增。就是正的形状倒置了,所以我们设计的时候是图上形状的相反。另外可以为diamond函数多设计两个参数,用来定位,位置和i
,j的初始值有关,这个简单的小程序或许不够吸引大家的关注,但是我们高中所做的线性规划可以用到这里,也就是线性规划能做的,我们都可以做,复杂的条件经过变换总是可以变得简洁易懂,再也不用纠结怎样去,函数平滑的曲线可以为我们创造很多自己想要的图形,只要函数能表示出来的,能线性规划出来的,都可以试试这个办法。真的很不错哦。
一个小小的idea,给我带来的是很多欣喜,自己学得东西,终于得到了用途。这充分说明了计算机和数学的联系。这是我探索路上的一个思考和成果。从数学的方面,我们可以发现很多的欣喜。
大风车:
关键判断代码:if((j>=n &&
j <=2*n &&
i>=n &&
i>=j) \
|| (j >=0 &&
j <=n &&
i>= 0 && i
<=n &&
i<=j) \
|| (j >= 0
&& j <= n
&& i >= n
&& i <= 2*n - j)
\
|| (j >= n
&& j <= 2*n
&& i <= n
&& i >= 2*n-j))
\
基本的格式是:if((条件范围1) || (条件判断2) || (条件判断3) || (条件判断4))
效果如下:
administrator@ubuntu:~/idea$
./a.out
******** *
******* **
****** ***
***** ****
**** *****
*** ******
*********
***************
********* ******
*** ***** **** **** ***** *** ****** ** *******
* ********
代码如下:
#include
int diamond(char c,int n)
{
int i,j;
for(i = 1; i < 2 *
n;i++)
{
for(j = 1;j < 2 *
n;j++)
{
if((j>=n &&
j <=2*n &&
i>=n &&
i>=j) || (j >=0
&& j <=n
&& i>= 0
&& i <=n
&& i<=j) || (j
>= 0 && j
<= n && i
>= n && i
<= 2*n - j) || (j >= n
&& j <= 2*n
&& i <= n
&& i >=
2*n-j))
printf("%c",c);
else
printf(" ");
}
printf("\n");
}
}
int main()
{
char c;
int n;
diamond('*',8);
return 0;
}
一个大风车,就是用线性规划做的。有点麻烦,但对数学好的同学,应该是很容易的事儿。当然,前提是:没有考虑效率,这计算机得进行多少运算哪!
上面的条件们可以进行一些优化。
我觉得这个方法对我来说最大的收获就是:1、我可以用自己的思考来做自己想要的图形,很明显,兴趣提升了。
2、学习计算机必须以数学为基础,当然,物理也不能落下(物理对学嵌入式很重要)。
3、单纯对于实现来说,我可以做到用原来的知识学以致用,并且有了一个新的实现手段。
4、有力的反驳了同学说的“不可能”。
代码看起来明显还很菜鸟,但是兴趣一定是最好的老师,什么事儿都看自己愿不愿意琢磨。
各位童鞋们,加油了
本文介绍了如何使用C语言结合线性规划来绘制图形,如钻石形状和大风车。通过调整坐标轴和设置不同条件,展示了将高中线性规划知识应用于编程的可能性,强调了数学在计算机科学中的重要性,以及实践和兴趣在学习过程中的作用。

被折叠的 条评论
为什么被折叠?



