打印

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

[复制链接]
1763|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cockroach|  楼主 | 2007-9-11 12:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一栋楼有30层,现有30个人(分别住在30层)要乘电梯到各自家中,每个人爬一层楼抱怨指数是3,下一层楼抱怨指数是 1,问使用一次电梯停在多少楼才能使抱怨指数最小?
    
            
 void main()
{
    int i,j,p,q,sum1,sum2,k;m=3;n=1;
 
 if(k>30) return;
for(i=0;30-k>0;i++ )

sum1+=p; p+=m; 
for(i=0;k--;i++)
sum2+=q; q+=n;
min(sum1+sum2)
return k;   
}

相关帖子

沙发
mohanwei| | 2007-9-11 15:27 | 只看该作者

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

找出极值的条件……

要不然你就要用枚举的方法了:
1楼-计算指数1;
2楼-计算指数2;
……
30楼-计算指数30;
然后比较这30个指数……

如果先建模,你可以列出停在x楼时,指数y的表达式,然后……

使用特权

评论回复
板凳
cockroach|  楼主 | 2007-9-11 17:49 | 只看该作者

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

算出楼层和抱怨指数的函数关系式也太有点麻烦了吧

使用特权

评论回复
地板
mohanwei| | 2007-9-12 11:34 | 只看该作者

这只是一个简单例题

如果实际中你碰到“楼”为几百万以上时……

使用特权

评论回复
5
cockroach|  楼主 | 2007-9-13 13:14 | 只看该作者

楼上是自己算的

使用特权

评论回复
6
zhugjbest| | 2007-9-13 14:55 | 只看该作者

典型的数学建模了

使用特权

评论回复
7
zgl7903| | 2007-9-13 20:04 | 只看该作者

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

#include <limits.h>

int main(int argc, char* argv[])
{
  int MAX_FLOOR = 30; //最多楼层
  int min_by_tk = 1; //最少抱怨停靠楼层
  int min_by = LONG_MAX; //最少抱怨
  for(int dt_tk = 1; dt_tk <= MAX_FLOOR; dt_tk++) //停靠楼层
  {
    int by = 0; //抱怨

    for(int upper = 1; upper < dt_tk; upper++) //向上爬的
    {
      by += (dt_tk - upper) * 3;
    }

    for(int down = MAX_FLOOR; down > dt_tk; down--) //向下爬的
    {
     by += (down - dt_tk) * 1;
    }

    if(min_by > by)//更少抱怨
    {
      min_by_tk = dt_tk;
      min_by = by;
    }

    printf("dt_tk = %02d  by = %d ",dt_tk,by);
  }

  printf(" 最少抱怨停靠楼层 %d ,抱怨 %d ",min_by_tk,min_by);

  return 0;
}

执行结果
dt_tk = 01  by = 435
dt_tk = 02  by = 409
dt_tk = 03  by = 387
dt_tk = 04  by = 369
dt_tk = 05  by = 355
dt_tk = 06  by = 345
dt_tk = 07  by = 339
dt_tk = 08  by = 337
dt_tk = 09  by = 339
dt_tk = 10  by = 345
dt_tk = 11  by = 355
dt_tk = 12  by = 369
dt_tk = 13  by = 387
dt_tk = 14  by = 409
dt_tk = 15  by = 435
dt_tk = 16  by = 465
dt_tk = 17  by = 499
dt_tk = 18  by = 537
dt_tk = 19  by = 579
dt_tk = 20  by = 625
dt_tk = 21  by = 675
dt_tk = 22  by = 729
dt_tk = 23  by = 787
dt_tk = 24  by = 849
dt_tk = 25  by = 915
dt_tk = 26  by = 985
dt_tk = 27  by = 1059
dt_tk = 28  by = 1137
dt_tk = 29  by = 1219
dt_tk = 30  by = 1305

最少抱怨停靠楼层 8 ,抱怨 337

使用特权

评论回复
8
mikesullen| | 2007-9-15 00:54 | 只看该作者

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

这题会有个争议的地方,1楼的人可以不坐电梯就可以到家了。。。。

使用特权

评论回复
9
cockroach|  楼主 | 2007-9-15 10:56 | 只看该作者

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

即题目一开始就是电梯封装30人,只关注停几楼,没告诉你电梯从几楼开始.

使用特权

评论回复
10
cockroach|  楼主 | 2007-9-15 11:20 | 只看该作者

楼上说的对,确实是反了

我算了下8层787  
23 层337
所以最佳停在23层, 谢谢7楼!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

198

帖子

0

粉丝