你的问题描述算比较清楚,不过如果就只按你的需求来看,我给你的伪代码算法就是下面这些.
在写伪代码的时候总感觉有的条件判断,照你的描述是不够的的.所以我只按你的需求给你写了下面的伪代码.
其中具体的实现代码,都很简单,我觉得你应该可以搞定.
写的比较仓促,很多地方不严禁,也可能存在很多问题,只希望能你一点点思路。并加以修改。
分割线
首先把你的需求拆分一下.
车分两种:客车(Bus),货车(Truck)
装车的船:船(ship)
代码:
static int bus =0;
static int truck =0;
static int ship =0;
先给默认0
根据实际数量输入就可以。
我的理解,简单主要的变量就这几个.
之后是拆分你的需求.
同类车先到先上船,因该是最后一个条件.
所以先写前面的.
首先我们在最开始,因该先判断ship上有车与否或者说船已经满了.
有和没有分开两条分支.
代码:
mian()
{
if(ship==0)
{
//如果船是空的执行A方法
this.A(bus,truck)
}
else
{
if(ship==10)
{
//满船,可以运送
return ;
}
//如果船不空则执行B方法
this.B(bus,truck,ship)
}
}
这个判断以后进入你的核心算法
代码:
A(int bus,int truck)
{
if(ship==10)
{
//满船,可以运送
return ;
}
if(bus>=4)
{
if(ship==8)
{
return;
}
ship=ship+4;
bus=bus-4;
//这里首先进行bus>=4 后 才可以允许 truck 上船
//完毕以后分两种情况。此时有truck或者没有。所以继续
if(truck>0)
{
ship=ship+1;
truck=truck-1;
//到这里完成一次理想条件下,两种车都有的上船过程
//所以一个完成判断完毕,就此可以再次执行A方法
this.A(bus,truck)
}
else//如果没有货车的情况下,执行到这边
{
if( ship - bus <= 0 )
{
int tempship = ship;
ship = ship + ((ship - bus)*-1);
bus = bus - ((tempship - bus)*-1);
//这里是如果bus数量少于ship的空位,就直接上船。
this.A(bus.truck)
}
else
{
// 这里在按需求编写。
}
}
}
}
先给你写那么多,不过这些都是C# 的语法,希望你可以举一反三。
如果不行。你在补充, 我给再给你写。