题目描述
一辆汽车加满油后可以行驶n公里(开始时汽车已加满油),旅途中共有k个加油站,第k+1个是目的地,输出最少加油次数,若到达不了目的地,请输出-1。
输入
输入n,k,分别表示汽车加满油可以走的路程和加油站的个数(0<n,k<=10^6)
接下来一行是k+1个数,表示第k-1个加油站到第k个加油站的距离
输出
输出若汽车可以到达目的地,输出最少加油次数,否则输出-1
样例输入
7 7
1 2 3 4 5 1 6 6
样例输出
4
思想:能不加油就不加
代码如下
#include<stdio.h>
#include<stdlib.h>
#define N 10000
int main(){
int stations[N];//间距
int aaa,num; //油箱满的时候可以走的距离 num;//中间加油站的数量
int all=0;//总的加油次数
int lv;//油箱中的油量可以走的距离
// printf("请输入加油站的距离和数量\n");
scanf("%d%d",&aaa,&num);
//油量赋初值
lv=aaa;
// printf("请输入加油站间的距离\n");
for(int i=0;i<num+1;i++){
scanf("%d",&stations[i]);
}
// printf("加油站间的距离分别为:\n");
for(int i=0;i<num+1;i++){
}
for(int i=0;i<num+1;i++){//如果油量可以支撑下一段路,则继续走
if(stations[i]>aaa) {
printf("-1");
printf("\n");
return 0;
}
if(lv>=stations[i]){
lv=lv-stations[i];
}
else { //否则加满油
lv=aaa-stations[i];
all++;
}
}
// printf("需要加油的总的加油站数量\n");
printf("%d\n",all);//输出总的加油次数
return 0;
}