看看这个题目 我编的程序 指点一二

[复制链接]
2564|9
 楼主| cockroach 发表于 2007-9-11 12:20 | 显示全部楼层 |阅读模式
一栋楼有30层,现有30个人(分别住在30层)要乘电梯到各自家中,每个人爬一层楼抱怨指数是3,下一层楼抱怨指数是&nbsp;1,问使用一次电梯停在多少楼才能使抱怨指数最小?<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;void&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,j,p,q,sum1,sum2,k;m=3;n=1;<br />&nbsp;<br />&nbsp;if(k&gt30)&nbsp;return;<br />for(i=0;30-k&gt0;i++&nbsp;)<br /><br />sum1+=p;&nbsp;p+=m;&nbsp;<br />for(i=0;k--;i++)<br />sum2+=q;&nbsp;q+=n;<br />min(sum1+sum2)<br />return&nbsp;k;&nbsp;&nbsp;&nbsp;<br />}
mohanwei 发表于 2007-9-11 15:27 | 显示全部楼层

你首先要做的不是编程,而是推导数学模型……

找出极值的条件……<br /><br />要不然你就要用枚举的方法了:<br />1楼-计算指数1;<br />2楼-计算指数2;<br />……<br />30楼-计算指数30;<br />然后比较这30个指数……<br /><br />如果先建模,你可以列出停在x楼时,指数y的表达式,然后……
 楼主| cockroach 发表于 2007-9-11 17:49 | 显示全部楼层

就是这一步min(sum1+sum2)不知道怎么解决啊

算出楼层和抱怨指数的函数关系式也太有点麻烦了吧
mohanwei 发表于 2007-9-12 11:34 | 显示全部楼层

这只是一个简单例题

如果实际中你碰到“楼”为几百万以上时……
 楼主| cockroach 发表于 2007-9-13 13:14 | 显示全部楼层

楼上是自己算的

  
zhugjbest 发表于 2007-9-13 14:55 | 显示全部楼层

典型的数学建模了

  
zgl7903 发表于 2007-9-13 20:04 | 显示全部楼层

茶余饭后,我也来凑凑热闹

#include&nbsp;&ltlimits.h&gt<br /><br />int&nbsp;main(int&nbsp;argc,&nbsp;char*&nbsp;argv[])<br />{<br />&nbsp;&nbsp;int&nbsp;MAX_FLOOR&nbsp;=&nbsp;30;&nbsp;//最多楼层<br />&nbsp;&nbsp;int&nbsp;min_by_tk&nbsp;=&nbsp;1;&nbsp;//最少抱怨停靠楼层<br />&nbsp;&nbsp;int&nbsp;min_by&nbsp;=&nbsp;LONG_MAX;&nbsp;//最少抱怨<br />&nbsp;&nbsp;for(int&nbsp;dt_tk&nbsp;=&nbsp;1;&nbsp;dt_tk&nbsp;&lt=&nbsp;MAX_FLOOR;&nbsp;dt_tk++)&nbsp;//停靠楼层<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;by&nbsp;=&nbsp;0;&nbsp;//抱怨<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;upper&nbsp;=&nbsp;1;&nbsp;upper&nbsp;&lt&nbsp;dt_tk;&nbsp;upper++)&nbsp;//向上爬的<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;+=&nbsp;(dt_tk&nbsp;-&nbsp;upper)&nbsp;*&nbsp;3;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;down&nbsp;=&nbsp;MAX_FLOOR;&nbsp;down&nbsp;&gt&nbsp;dt_tk;&nbsp;down--)&nbsp;//向下爬的<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;+=&nbsp;(down&nbsp;-&nbsp;dt_tk)&nbsp;*&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(min_by&nbsp;&gt&nbsp;by)//更少抱怨<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min_by_tk&nbsp;=&nbsp;dt_tk;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min_by&nbsp;=&nbsp;by;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;dt_tk&nbsp;=&nbsp;%02d&nbsp;&nbsp;by&nbsp;=&nbsp;%d
&quot;,dt_tk,by);<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;printf(&quot;
最少抱怨停靠楼层&nbsp;%d&nbsp;,抱怨&nbsp;%d
&quot;,min_by_tk,min_by);<br /><br />&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />执行结果<br />dt_tk&nbsp;=&nbsp;01&nbsp;&nbsp;by&nbsp;=&nbsp;435<br />dt_tk&nbsp;=&nbsp;02&nbsp;&nbsp;by&nbsp;=&nbsp;409<br />dt_tk&nbsp;=&nbsp;03&nbsp;&nbsp;by&nbsp;=&nbsp;387<br />dt_tk&nbsp;=&nbsp;04&nbsp;&nbsp;by&nbsp;=&nbsp;369<br />dt_tk&nbsp;=&nbsp;05&nbsp;&nbsp;by&nbsp;=&nbsp;355<br />dt_tk&nbsp;=&nbsp;06&nbsp;&nbsp;by&nbsp;=&nbsp;345<br />dt_tk&nbsp;=&nbsp;07&nbsp;&nbsp;by&nbsp;=&nbsp;339<br />dt_tk&nbsp;=&nbsp;08&nbsp;&nbsp;by&nbsp;=&nbsp;337<br />dt_tk&nbsp;=&nbsp;09&nbsp;&nbsp;by&nbsp;=&nbsp;339<br />dt_tk&nbsp;=&nbsp;10&nbsp;&nbsp;by&nbsp;=&nbsp;345<br />dt_tk&nbsp;=&nbsp;11&nbsp;&nbsp;by&nbsp;=&nbsp;355<br />dt_tk&nbsp;=&nbsp;12&nbsp;&nbsp;by&nbsp;=&nbsp;369<br />dt_tk&nbsp;=&nbsp;13&nbsp;&nbsp;by&nbsp;=&nbsp;387<br />dt_tk&nbsp;=&nbsp;14&nbsp;&nbsp;by&nbsp;=&nbsp;409<br />dt_tk&nbsp;=&nbsp;15&nbsp;&nbsp;by&nbsp;=&nbsp;435<br />dt_tk&nbsp;=&nbsp;16&nbsp;&nbsp;by&nbsp;=&nbsp;465<br />dt_tk&nbsp;=&nbsp;17&nbsp;&nbsp;by&nbsp;=&nbsp;499<br />dt_tk&nbsp;=&nbsp;18&nbsp;&nbsp;by&nbsp;=&nbsp;537<br />dt_tk&nbsp;=&nbsp;19&nbsp;&nbsp;by&nbsp;=&nbsp;579<br />dt_tk&nbsp;=&nbsp;20&nbsp;&nbsp;by&nbsp;=&nbsp;625<br />dt_tk&nbsp;=&nbsp;21&nbsp;&nbsp;by&nbsp;=&nbsp;675<br />dt_tk&nbsp;=&nbsp;22&nbsp;&nbsp;by&nbsp;=&nbsp;729<br />dt_tk&nbsp;=&nbsp;23&nbsp;&nbsp;by&nbsp;=&nbsp;787<br />dt_tk&nbsp;=&nbsp;24&nbsp;&nbsp;by&nbsp;=&nbsp;849<br />dt_tk&nbsp;=&nbsp;25&nbsp;&nbsp;by&nbsp;=&nbsp;915<br />dt_tk&nbsp;=&nbsp;26&nbsp;&nbsp;by&nbsp;=&nbsp;985<br />dt_tk&nbsp;=&nbsp;27&nbsp;&nbsp;by&nbsp;=&nbsp;1059<br />dt_tk&nbsp;=&nbsp;28&nbsp;&nbsp;by&nbsp;=&nbsp;1137<br />dt_tk&nbsp;=&nbsp;29&nbsp;&nbsp;by&nbsp;=&nbsp;1219<br />dt_tk&nbsp;=&nbsp;30&nbsp;&nbsp;by&nbsp;=&nbsp;1305<br /><br />最少抱怨停靠楼层&nbsp;8&nbsp;,抱怨&nbsp;337<br /><br />
mikesullen 发表于 2007-9-15 00:54 | 显示全部楼层

楼上好象把上楼和下楼搞反了

这题会有个争议的地方,1楼的人可以不坐电梯就可以到家了。。。。
 楼主| cockroach 发表于 2007-9-15 10:56 | 显示全部楼层

说的是坐电梯,没说从一楼开始

即题目一开始就是电梯封装30人,只关注停几楼,没告诉你电梯从几楼开始.<br /><br />
 楼主| cockroach 发表于 2007-9-15 11:20 | 显示全部楼层

楼上说的对,确实是反了

我算了下8层787&nbsp;&nbsp;<br />23&nbsp;层337<br />所以最佳停在23层,&nbsp;谢谢7楼!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

198

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部