首页 热点专区 义务教育 高等教育 出国留学 考研考公

关于编程?

发布网友

我来回答

3个回答

热心网友

若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个旅行者的情形,从而递归解决之。
 
……         
A
Z
→          
A
←          
……
也就是“由A护送到对岸,A返回”,称作“模式一”。
……          
……  
第n-2步:   A
B
→   
第n-1步:    A
←    
第n步:   
Y
Z
→  
第n+1步:    B
←          
……
这个模式是“由A和B护送到对岸,A和B返回”,称作“模式二”。
C++代码:
#include<iostream>
#include<algorithm>
using
namespace
std;
int
main()
{
int
n
=
4;
int
i,fast1,fast2,slow1,slow2,sum,l;
sum
=
0;
int
*a
=
new
int
[n];
for(i
=
1;i
<=
n;i++)
cin
>>
a[i];
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<<sum<<endl;
return
0;
}
分析非原创,原创代码有点瑕疵,个人修改了下
希望对你有帮助

热心网友

这类问题每天都有N个人来问,自己搜索一下吧,就我个人来说,我对那些自己什么都不干全指望别人帮忙的相当反感

热心网友

找本书看看

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com