汽车加油问题

来源:互联网 发布: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;

}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 cad打不出来字怎么办 用cad打不出来字怎么办 打字总打错字母怎么办 mac做ppt卡住了怎么办 mac的ppt卡住了怎么办 淘宝店铺被屏蔽了怎么办 淘宝申请售后卖家拒绝怎么办 淘宝投诉卖家入口关闭怎么办 遇见最喜欢孩子的父母怎么办 房屋备案表丢了怎么办 淘宝发布商品没有品牌怎么办 电子发票名称写错了怎么办 合同写错了划掉怎么办 进京证日期错了怎么办 买车时谈的协议与合同不一致怎么办 新车上牌找不到流水号怎么办 开票数量比入库数量少怎么办 我贷款的app忘了怎么办 网贷名字忘了怎么办 附件太大邮件发不出去怎么办 孩子出生足印单子丢了怎么办 保险名字写错了怎么办 行驶证和身份证名字不一样怎么办 上户后发现合格证和车不一样怎么办 新车上户重量不一样怎么办 医保卡和身份证名字不一样怎么办 保险标志保险卡都没给怎么办 新买的电动自行车不符合标准怎么办 电费的户号12位怎么办? 买到过期的药品怎么办 淘宝代销宝贝信息不全怎么办 en和eng读不明显怎么办 快递收件人填错手机号没收到怎么办 快递收件人电话写错了怎么办 收件人电话写错了怎么办 大货要出货了数量错误怎么办 手被烫伤留疤怎么办 cbg被下单不能改价怎么办 浪琴手表日期中午跳怎么办 社保一体卡丢失了怎么办 京东付款七天不发货怎么办