关于编程?

[复制链接]
查看11 | 回复1 | 2006-11-25 10:01:32 | 显示全部楼层 |阅读模式
找本书看看
回复

使用道具 举报

千问 | 2006-11-25 10:01:32 | 显示全部楼层
若N人过桥1)如果N=1、2,所有人直接过桥。  2)如果N=3,由最快的人往返一次把其他两人送过河。  3)如果N≥4,设A、B为走得最快和次快的旅行者,过桥所需时间分别为a、b;而Z、Y为走得最慢和次慢的旅行者,过桥所需时间分别为z、y。那么    当2b>a+y时,使用模式一将Z和Y移动过桥;    当2b<a+y时,使用模式二将Z和Y移动过桥;    当2b=a+y时,使用模式一将Z和Y移动过桥。这样就使问题转变为N-2个旅行者的情形,从而递归解决之。 ……         AZ→          A←          ……也就是“由A护送到对岸,A返回”,称作“模式一”。……          ……  第n-2步:   AB→   第n-1步:    A←    第n步:   YZ→  第n+1步:    B←          ……这个模式是“由A和B护送到对岸,A和B返回”,称作“模式二”。C++代码:#include#includeusingnamespacestd;intmain(){intn=4;inti,fast1,fast2,slow1,slow2,sum,l;sum=0;int*a=newint[n];for(i=1;i>a;sort(a+1,a+n+1);fast1=a[1];fast2=a[2];slow1=a[n-1];slow2=a[n];l=1;while(n!=0){if(n==1||n==2){sum+=slow2;break;}if(n==3){sum+=(slow2+slow1+fast1);break;}if(2*fast2>=fast1+slow1){sum+=(slow1+slow2+2*fast1);n-=2;slow2=a[n];slow1=a[n-1];}else{sum+=2*fast2+fast1+slow2;n-=2;slow2=a[n];slow1=a[n-1];}}cout
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行