汽车加油
一辆汽车加满油后可以行驶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;
}