汽车加油问题
来源:互联网 发布:java开源框架怎么使用 编辑:程序博客网 时间:2024/04/28 08:28
一、实验目的
1、理解并掌握贪心算法,学会运用贪心算法解决问题。
2、掌握贪心算法的基本要素:最优子结构性质和贪心选择性。
二、问题描述
一辆汽车加满油后可以行驶nkm。旅途中有若干个加油站。设计一个有效算法,指出应在那些加油站停靠加油, 使沿途的加油次数最少。并证明算法能产生一个最优解。
对于给定的n和k个加油站位置,计算最少加油次数。
数据输入:第一行有2个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。
结果输出:输出编程计算出的最少加油次数。如果无法到达目的地,则输出”NoSolution”。
三、问题分析
该问题运用贪心算法计算最小加油次数。将问题分为以下几种情况考虑:
(1)始点与终点的距离不超过nkm,则不需要加油。输出0。
(2)始点与终点的距离超过nkm,且每两个加油站之间的距离不超过nkm,则可以达到目的地。
(3)某两个加油站之间的距离大于nkm,则无法达到目的地,输出“No Solution”。
实现:在每一个加油站出发前先做出判断,判断到下一个加油站的路程是否大于nkm,若大于则直接输出“No Solution”的不可达信息。否则再判断当前汽车中的油能否支持汽车到达下一加油站,若能支持则继续出发,不能则加油。
#include <iostream>
using namespace std;
int main()
{
int n,k,num=0;
cin>>n>>k;//输入加满油可行驶的路程和加油站个数
int m=n;
int a[k+1];
for(int i=0;i<k+1;i++)
cin>>a[i];//输入加油站之间的距离
for(inti=0;i<k+1;i++)
{
//判断是否能达到目的地
if(n<a[i])
{
cout<<"No Solution";
return 0;
}
//判断剩余的油是否足够到达下一站
elseif(m>=a[i])
m-=a[i];
else
{
//加油
m=n;
num++;
i--;
}
}
cout<<num;
return0;
}
- 汽车行驶加油问题
- 汽车加油问题
- 汽车加油行驶问题
- 汽车加油问题(智力题)
- 汽车加油问题
- 汽车加油问题
- 【智力题】汽车加油问题
- 汽车加油问题
- 汽车加油问题
- 汽车加油行驶问题
- 汽车加油问题
- 汽车加油问题
- 算法 汽车加油问题
- 汽车加油问题
- 汽车加油问题
- 汽车加油问题
- 汽车加油问题
- 汽车加油问题
- [SpringMVC 源码] 415 (Unsupported Media Type) 原因及解决方案
- 栈与队列_第10章_基本数据结构_算法导论
- 重识java6
- 叉乘
- Android测试
- 汽车加油问题
- Install Kubernetes From a Scratch
- 12-7 ~ 12-19杂题
- token cookie session
- 查找文件被操作的进程与代码
- 数据类型范围
- linux上通过virtualenv部署虚拟环境
- magento1.x B2B存储价格和价格转换
- -lmysqlclient