算法课上,老师讲了一个问题的算法实现,感觉很典型,也很有意思。
问题:桃3钱一个、李4钱一个、橄榄1钱7个,若百钱购得百个,求桃、李、橄榄各几个?并给出实现算法
对于这样的问题,第一感觉就是得出其方程组(设桃x个、李y个、橄榄z个)
x+y+z=100
3x+4y+z/7=100
其中:x、y、z为0-100之内的整数
这个问题可以用o(n^3)、o(n^2)的算法实现,一般我们对于这样的问题只要实现并得出结果了之后就不再深究了。其实可以用一个o(n)的算法实现之。
思路:第二式乘7,然后减去第一式可得到
20x+27y=600
通过此式可以得出x为3的倍数,y是20的倍数且不大于600/27<30;
也就是说y只有0、20两种取值可能,然后x则可以通过此式取得x=(600-27y)/20
最后z可以通过x+y+z=100获得。
根据这种思路只需要循环两次就可以把结果求解出来。
具体的C#代码如下:
int x, y, z;//其中桃为x,李为y,橄榄为z
for (y = 0; y <= 20; y += 20)
{
x = (600 - 27 * y) / 20;
z = 100 - x - y;
if ((3 * x + 4 * y + z / 7) == 100)
{
Console.WriteLine("符合要求的结果为:桃(x)-{0};李(y)-{1};橄榄(z)-{2}", x, y, z);
}
}
运行结果为:
符合要求的结果为:桃(x)-30;李(y)-0;橄榄(z)-70
符合要求的结果为:桃(x)-3;李(y)-20;橄榄(z)-77
体会:其实利用计算机和垃圾处理有类似——如果在垃圾处理之前能很好的把垃圾进行分类,则在处理的时候就可以节省很多 资源和时间;计算机也一样,若在给计算机处理之间,能进行比较细致的分析和处理,然后再交给计算机处理,往往可以节省很多的计算机时间和计算机资源。
在社会大分工的情况之下,每一个部分都是大分工中不可缺少的部分,所以每一部分都是需要努力完成和做好的。
问题:桃3钱一个、李4钱一个、橄榄1钱7个,若百钱购得百个,求桃、李、橄榄各几个?并给出实现算法
对于这样的问题,第一感觉就是得出其方程组(设桃x个、李y个、橄榄z个)
x+y+z=100
3x+4y+z/7=100
其中:x、y、z为0-100之内的整数
这个问题可以用o(n^3)、o(n^2)的算法实现,一般我们对于这样的问题只要实现并得出结果了之后就不再深究了。其实可以用一个o(n)的算法实现之。
思路:第二式乘7,然后减去第一式可得到
20x+27y=600
通过此式可以得出x为3的倍数,y是20的倍数且不大于600/27<30;
也就是说y只有0、20两种取值可能,然后x则可以通过此式取得x=(600-27y)/20
最后z可以通过x+y+z=100获得。
根据这种思路只需要循环两次就可以把结果求解出来。
具体的C#代码如下:
int x, y, z;//其中桃为x,李为y,橄榄为z
for (y = 0; y <= 20; y += 20)
{
x = (600 - 27 * y) / 20;
z = 100 - x - y;
if ((3 * x + 4 * y + z / 7) == 100)
{
Console.WriteLine("符合要求的结果为:桃(x)-{0};李(y)-{1};橄榄(z)-{2}", x, y, z);
}
}
运行结果为:
符合要求的结果为:桃(x)-30;李(y)-0;橄榄(z)-70
符合要求的结果为:桃(x)-3;李(y)-20;橄榄(z)-77
体会:其实利用计算机和垃圾处理有类似——如果在垃圾处理之前能很好的把垃圾进行分类,则在处理的时候就可以节省很多 资源和时间;计算机也一样,若在给计算机处理之间,能进行比较细致的分析和处理,然后再交给计算机处理,往往可以节省很多的计算机时间和计算机资源。
在社会大分工的情况之下,每一个部分都是大分工中不可缺少的部分,所以每一部分都是需要努力完成和做好的。