百元百鸡中的数学问题

我前些天在一位大佬的博客中看到了关于百鸡问题的解决方案所想到的问题,数学在对程序的重要性。

正常我们看到百鸡问题(公鸡五元一只,母鸡三元一只,小鸡一元三只,100元钱买100只鸡其中公鸡母鸡小鸡各多少只)就直接列个等式

x+y+z=100    5x+3y+z/3=100   0<x<20;  0<y<33;   然后就可以写出代码

for(int i =1;i<20;i++){//公鸡数
for(int j=1;j<33;j++){
int k=100-i-j;
if(k%3==0&&(i*5+3*j+k/3==100)){
System.out.println("公鸡:"+i+"母鸡"+j+"小鸡"+k);
}
}

我们往往一运行得出结果就行了,但是压根不去考虑这段代码的时间复杂度,看这段代码两层for循环,所有时间复杂度为O(n^2);

这个时间复杂度就预示着我们的算法需要优化了。

其实 我们对我们刚得到的方程进行运算, 可以得到y=25-7/4x 因为鸡不能买半只,所哟 x为整数,如1,2,3....

所以  x=4k; y=25-7k; z=75+3k;  k为自然数  切  k<=3;

for(int i=1;i<=3;i++){
int x=4*i;
int y=25-7*i;
int z=75+3*i;
System.out.println("公鸡:"+x+"母鸡"+y+"小鸡"+z);
}

代码如上就是时间复杂度为O(n);

我刚开始遇到百鸡问题的时候也是 到了第一步就停下来了,不去管时间复杂度的大小,也不考虑代码是否优化,在我看到这篇文章后,我觉得数学在我们的程序中得重要性。我们在遇到问题的时候,不要上来就开始编码,要先有个清晰地思路,然后看计划是否可行,是否可以优化,这才是对程序的负责,而不是写完运行出结果,就完事了。

重视数学,重视算法!

原文地址:https://www.cnblogs.com/wanglingdeboke/p/9453233.html