问题描述:
一辆汽车加满油后可以行驶n千米,旅途中有若干加油站,指出若要使沿途加油次数最少,应在哪些加油站停靠加油。
代码
#include<stdio.h>
#define maxSize 10000
void greedy(int d[],int n,int k){
int num=0; //记录加油次数
for(int i=0;i<=k;i++){
if(d[i]>n){
printf("加油站间距离太远,无解\n");
return;
}
}
for(int i=0,s=0;i<=k;i++){
s+=d[i]; //记加满油到下一站点的距离
if(s>n){ //大于满油行驶最大路径,代表在当前站点加油了
num++;
s=d[i]; //加油后,到下一站点行驶的距离
}
}
printf("需要加油的总的加油站数量%d\n",num);
}
int main(){
int n,k; //n是满油行驶距离,k是加油站数
int d[maxSize];
printf("请输入加满油能行驶的最大距离和加油站的数量\n");
scanf("%d %d",&n,&k);
printf("请输入每两加油站间的距离,最后一距离表示到终点距离\n");
for(int i=0;i<=k;i++){ //等于k时,表示最后一个加油站到终点距离
scanf("%d",&d[i]);
}
greedy(d,n,k);
}