题目描述:
已知一辆汽车加满油后可行驶d(如d=7)km,而旅途中有若干个加油站。编写一个实验程序指出应在哪些加油站停靠加油,使加油次数最少。用a数组存放加油站之间的距离,例如a[]={2,7,3,6},表示共有n=4个加油站(加油站编号是0~n-1),从起点到0号加油站的距离为2km,依次类推。
用例
输入:n=4 //加油站数量
d=6 //汽车加满油后可行驶的里程
a[]={2,7,3,6} //加油站之间的距离
输出:汽车不可能达到终点站! //0号和1号加油站间距大于汽车加满油可行驶里程
输入:n=4 //加油站数量
d=7 //汽车加满油后可行驶的里程
a[]={2,7,3,6} //加油站之间的距离
输出:3 //最小加油次数
思路:
贪心问题求解,若剩下的油量能到达下一站则在本站不加油,若不能到达则加油
代码实现:
#include<iostream>
using namespace std;
const int N = 100010;
int main() {
int n; cin >> n;//加油站数量
int d; cin >> d;//汽车加满油可行驶的路程
int a[N];
for (int i = 0; i < n; i++)
{
cin >> a[i];//输入n个加油站之间的距离
if (a[i] > d) {
cout << "汽车不可能到达终点站";
return 0;
}/*当某两站之间的路程比汽车加满油行驶路程还长,汽车不可能到达终点站*/
}
int oil=d;//记录汽车油量
int res=0;//加油的次数
for (int i = 0; i < n; i++)
{
if (oil > a[i])
{
oil = oil - a[i];
}
else {
oil = oil + d;
res++;
}
}
cout << res;
return 0;
}