java 汽车加油问题_贪心算法 汽车加油问题 | 学步园

这篇博客探讨了如何使用贪心算法来解决汽车在途经多个加油站时的最少加油次数问题。博主通过读取输入文件中的汽车行驶距离和加油站间距数据,实现了两种解决方案:一种是使用向量,另一种是使用指针。程序会判断是否可以到达目的地,并输出最少的加油次数,若无法到达则输出"NoSolution"。
摘要由CSDN通过智能技术生成

/

//一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效      //

//

// n和k个加油站位置,编程计算最少加油次数。并证明算法能产生一个最优解。    //

//要求:                                                                  //

//输入:第一行有个正整数n和k,表示汽车加满油后可行驶n公里,               //

//且旅途中有k个加油站。接下来的行中,有k+1个整数,表示第k个加      //

//油站与第k-1个加油站之间的距离。第个加油站表示出发地,汽车已加    //

//满油。第k+1个加油站表示目的地。                                  //

//输出:输出编程计算出的最少加油次数。如果无法到达目的地,                //

//则输出”NoSolution”。                                              //

//思路:                                                                  //

//汽车行驶过程中,应走到自己能走到并且离自己最远的那个加油站,      //

//在那个加油站加油后再按照同样的                                        //

/

/

//TITLE:贪心算法汽车加油问题                                              //

//EDITOR:小桥流水                                                         //

//DADE:2008.12.7                                                          //

//TOOL:Microsoft Visual Studio 2008                                     //

/

//METHOD: 用向量实现                                                       //

/

#include"stdafx.h"

#include

#include

#include

usingnamespacestd;

void_tmain(intargc,_TCHAR*argv[])

{

vectorv;

vectorv1;

intn,k,i,sum=0,count=0;

boolisSolution=true;

ifstreamfin;

fin.open("input.txt");//打开文件

fin>>n>>k;//从文件中读取汽车加满油后可行驶距离n,加油站的个数k

inttemp;

for(i= 0;i<=k;i++)//循环的从文件中读取各加油站的间距

{

fin>>temp;

v.push_back(temp);

}

i= 0;

ofstreamfout("output.txt");

while(i<=k)

{

if(v[i]>n)//如果成立,则不能到达目的地

{

isSolution=false;

break;//跳出循环

}

count+=v[i];

if(count>n)

{

v1.push_back(i);//记录最优解

count= 0;

sum++;//m记录最少的加油次数

}

else

{

i+= 1;

}

}

if(isSolution)//将结果写入文件

fout<

else

fout<

cout<

cout<

for(i= 0;i

{

cout<

}

cout<

fout.close();//关闭文件

fin.close();

}

/

//METHOD: 用指针实现                                                       //

/

#include"stdafx.h"

#include

#include

usingnamespacestd;

voidmain()

{

int*a,*b,n,k,i,m=0,count=0;

boolisSolution=true;

ifstreamfin;

fin.open("input.txt");//打开文件

fin>>n>>k;//从文件中读取汽车加满油后可行驶距离n,加油站的个数k

a=newint[k+1];

for(i= 0;i<=k;i++)//循环的从文件中读取各加油站的间距

fin>>a[i];

b=newint[k+1];

b[0] = 0;

i= 0;

ofstreamfout("output.txt");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值