每天学习时间的合理安排

如果每天学习的总时间是7.5小时,那么上午,下午和晚上各安排多久的时间最为适宜呢?

这么个问题,要深入分析还是挺麻烦的,那就简单点,取上午,下午和晚上时间之积最大为最适宜的怎么样?

那就这么办吧

但是具体该怎么算出来了。以前高中学的函数求最值的方法都忘了。现在作为一个初级的程序员,也就只能试试用代码来解决问题了。

本来我学过的语言乱七八糟的,种类多是多,但很多都是入门的。现在决定写代码首先得决定用什么语言。matlab是个好想法,也是做计算类的程序好语言,但是不太想要,毕竟还要找到matlab再点开,实在是麻烦。javascript这个玩意我虽然是很熟,但是我之前的编写环境都是要在浏览器中运行的,而且还要写一些html标签,实在是麻烦,要是哪天找到脱离浏览器和html的开发环境也是极好的。之前听说python是一个跨平台的脚本语言,写好后可以直接就运行了,而且我之前在安装mysql的时候有附带安装了python3.4.2,这些也就是现成的环境都有了,唯一的问题是python对我而言只是听说过,尚且没有见过真正的python代码,所以需要现学现卖,这个不拍,我不嫌这个麻烦,那么就先看看python的语法。

决定要用什么语言,以及需要的语言也学习好了,那么就要设计算法了。要解决上面的问题,该怎么解决呢,直接给上午,下午,晚上三个变量a,b,c,然后循环赋值,找到最大的乘积嘛,对于这么个小问题还是用最笨的方法吧。

折腾了一会,python代码如下:

d=[]
e=[]
for i in range(10,75,5):
  a=i
  for j in range(10,75-i,5):
      b=j
      c=75-j-i
      d.append(a*b*c)
      e.append(str(a)+str(b)+str(c))

然后找到d中的最大值,对应的e中的a,b,c就是我要找的结果

>>> d
[5500, 7500, 9000, 10000, 10500, 10500, 10000, 9000, 7500, 5500, 3000, 7500, 10125, 12000, 13125, 13500, 13125, 12000, 10125, 7500, 4125, 9000, 12000, 14000, 15000, 15000, 14000, 12000, 9000, 5000, 10000, 13125, 15000, 15625, 15000, 13125, 10000, 5625, 10500, 13500, 15000, 15000, 13500, 10500, 6000, 10500, 13125, 14000, 13125, 10500, 6125, 10000, 12000, 12000, 10000, 6000, 9000, 10125, 9000, 5625, 7500, 7500, 5000, 5500, 4125, 3000]
>>> e[33]
'252525'

可见上午2.5小时,下午2.5小时,晚上2.5小时就能达到最大的乘积。忽然想起来好像以前高中学的的确是三个数之和固定的时候,当三个数相等的时候最大。如是有到网上查了一下这是个什么定理。但是没有搜到,但是有人给出了证明如下:

x1+x2+x3+x4+...+xn=m
由均值不等式,x1x2x3...xn<=((x1+x2+x3+x4+...+xn)/n)^n=(m/n)^n
等号成立当且仅当x1=x2=x3=...=xn=m/n
但是,要求都是整数,上面的条件不一定成立。

但是x1,x2,x3...xn越接近乘积越大,证明如下:
我们考虑这样的一组 x1,x2,x3,...,xn:其中有xi,xj满足xi-xj>=2;
令xi--->xi-1,xj--->xj+1
那么乘积x1x2...xixj...xn < x1x2...(xi-1)(xj+1)...xn(比较一下xixj和(xi-1)(xj+1)就知道)

也就说,经过一次这样的操作之后,数组的和不变,乘积增大。

那么我们可以预见,有限步之后,达到最大乘积时,x1x2x3...xn各整数两两之差为0或1。

简而言之,当x1,x2,x3,...,xn只由k和k+1两种数字组成时乘积最大。


对于最后查找最大项,我是用人工来判断的,因为d和e是相关联的,所以如果直接对d排序后,虽然找到最大值,但是丢失了之前和e的映射关系,不得已还是人工判断吧。

不知道是不是有什么更好的办法来解决这个问题,就类似于数据库中按某个字段来对整个表排序的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值