贪心算法汽车加油问题



汽车加油

一辆汽车加满油后可以行驶n公里,旅途中有加油站,设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
测试用例: 7 7 (n k)
1 2 3 4 5 1 6 6(第k个加油站与第k-1个加油站之间的距离,其中第一个代表起点,最后一个代表终点。)
输出: 4(最少加油次数)

分析:

按照贪心算法的思想,加一次油尽可能多行驶几个站,最好情况是起点加油,直接到终点,中途不要加油,然并卵。
所以,要判断行驶距离n与站点间距离的和s的关系,如果n>s,能继续往后行驶,否则加油。

#include<stdio.h>
int main(){
    int n,k;                  //n代表汽车加满油可行驶n千米,k代表有几个加油站 
    scanf("%d%d",&n,&k);
    int p[k+1],stop[k+1];        //p数组代表各加油站之间距离,s数组代表在哪一站加油 
    int i,s=0,num=0;          //num代表加油次数 
    for(i=0;i<k+1;i++){       //各加油站之间的距离 
        scanf("%d",&p[i]); 
        stop[i]=0;
    }
    for(i=0;i<k+1;i++){       //尽量加一次油,多行驶几个站,如果油不够,则停下加油 
        s+=p[i];
        if(s<=n){
            continue;
        }else{
            num++;
            s=0;
            stop[i]++;
            i--; 
        }
    } 
    printf("%d次\n",num);
    printf("加油的站点为:\n");
    for(i=0;i<k+1;i++){
        if(stop[i]>0){
            printf("%d\t",i);
        }
    }
    return 0;
}
运行截图

推荐阅读更多精彩内容