ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法设计与分析_3_25---汽车加油问题(贪心算法-简)

2021-03-26 16:32:36  阅读:239  来源: 互联网

标签:25 加满 int --- 加油站 算法 最少 加油


 

【问题描述】试用贪心算法求解汽车加油问题:已知一辆汽车加满油后可行驶n公里,而旅途中有若干个加油站,试设计一个有效算法,指出应在哪些加油站停靠加油,使加油次数最少,请写出该算法。

编程任务:

  对于给定的n和k个加油站位置,编程计算最少加油次数。

数据输入:

  第1行有2个正整数n和k,表示汽车加满油后可行驶nkm,且旅途有k个加油站。接下来的一行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。

结果输出:

        计算出的最少加油次数。如果无法到达目的地,则输出”No Solution”。

测试样例:

输入:

7 7

1 2 3 4 5 1 6 6

输出:

最少加油次数为 : 4
加油站的位置为:

3 4 6 7

#include <iostream>
#include <stdlib.h>
using namespace std;

void oil(int n,int k,int d[],int m[])
{
    int num=0;
    for(int i=0;i<=k;i++)
    {
        if(d[i]>n)
        {
            cout<<"No Solution"<<endl;
            return;
        }
    }
    int c=0;
    for(int i=0,s=0;i<=k;i++)
    {
        s=s+d[i];
        if(s>n)
        {
            num++;
            s=d[i];
            m[c]=i;
            c++;
        }
    }
    cout<<"最少的加油站数为:"<<num<<endl;
    cout<<"加油站的位置为:"<<endl;
    for(int i=0;i<c;i++)
    {
        cout<<m[i]<<" ";
    }
}

int main()
{
    int n,k;
    int d[1000];
    int *m=(int*)calloc(k,sizeof(int));
    cin>>n>>k;
    for(int i=0;i<=k;i++)
    {
        cin>>d[i];
    }
    oil(n,k,d,m);
}




 

标签:25,加满,int,---,加油站,算法,最少,加油
来源: https://blog.csdn.net/weixin_45713468/article/details/115249484

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有