汽车加油问题贪心算法
⑴ 汽车加油问题 贪心算法(C++)
第一次加满油
然后在能到达的最远的加油站再加满油
如此反复, 最后到达目的地
如果中间某次加油后不能到达下面任何一个加油站
那么就无解
⑵ 求贪心算法汽车加油问题程序
#include<iostream.h>
#include<fstream.h>配键
void addoil(int &n,int &k,int *a,int *c,bool *b1,bool *b2,int &count)
{
int oil=n;
//count=0;
int i=0;
//a=new int[k+1];
b1=new bool[k+1];
c=new int[k+1];
b2=new bool[k+1];
while(i<=k)
{
if(oil-a[k]<a[k+1])
{
oil=n;
count++;
c[k]=k;
b1[k]=true;
}
if(a[k]>n)
{
b2[k]=false;
break;
}
if(oil-a[k]>a[k+1] && a[k]<=n)
i++;
}
}
void main()
{
int n,k;
int count=0;
int *a,*c;
bool *b1,*b2;
ifstream fin;
fin.open("D:\\input.txt");
fin>>n>>k;
a=new int[k+1];
b1=new bool[k+1];
c=new int[k+1];
b2=new bool[k+1];
for(int i=0;i<k+1;i++)
fin>>a[i];
addoil(n,k,a,c,b1,b2,count);
ofstream fout("D:\\output.txt");
for(int j=0;j<k+1;j++)
if(b2[j]=false)
{
fout<培谨巧<晌弯"No Solution";
return;
}
for(int l=0;l<k+1;l++)
if(b1[l]=true)
{
fout<<"should add oil at the "<<c[k]<<"service station"<<endl;
}
fout<<count;
}
⑶ 智力题!求教高手!汽车加油问题
加12次油~ 12次
具体分析~
只看前面500米~ 把500公里 没隔100公里定为一个点
也就是起点是加油站 后面五个点为油桶
你分完段后从加油站出发到第一个油桶来回要用去200公里的油则你只能存300公里的油,到底存多少一开始谁都不知道~所以我们要从后往前推
你若想行驶玩最后500公里则你车里必须在500公里处时油是满的
那么你在第4油桶必须存800公里的油 从第4油桶往第5油桶存油来回消耗200公里的油 则存300公里的油 再从第4油桶到第5油桶要消耗100公里的油
第5油桶有300公里的油 则车里还要有200公里的油 算一下你到第四油桶往第五油桶行驶时必须要有800公里的油
一次类推 第三油桶往第四油桶行驶时要有1300公里的油
第二油桶往第三油桶行驶时要有2200公里的油
第1油桶往第2油桶行驶时要有3700公里的油
加油站往第一油桶运11次是3300公里的油 回去加油 回到第一桶油的位置车上还有400公里的油 加起来刚好3700公里的油 总共加了12次