1.試用貪心算法求解汽車加油問題:已知一輛汽車加滿油后可行駛n公里,而旅途中有若干個加油站。試設計一個有效算法,指出應在哪些加油站停靠加油,使加油次數最少請寫出該算法。
(假設汽車出發時已經加滿油)
#include <iostream> #define M 100 using namespace std; /*加滿油之后可行駛n公里, 對於給定的n和k個加油站位置,計算最少加油次數。 基本思路:經過加油站時如果汽車有油,且能到達下一個加油站, 就不加油,否則,加油 設定數組來記錄經過加油站時是否加油*/ int main() { int station[M];//記錄加油站之間的路程 int n;//汽車加滿油后能行駛的里程 int k1;//加油站個數 int k[M];//記錄是否加油 int lv;//油箱中的油可以走的距離 cout<<"輸入加油站的數量:"; cin>>k1; cout<<"輸入各個加油站之間的距離:"; for(int i=0;i<k1+1;i++)//共k+1段距離 { cin>>station[i]; } cout<<"輸入加滿油后可以走的距離"; cin>>n; lv=n-station[0]; for(int i=0;i<k1;i++) { if(lv<station[i+1])
{
k[i]=1;
lv=n-station[i+1];
}
else
{
k[i]=0;
lv=lv-station[i+1];
} } cout<<"需要在第:"; for(int i=0;i<k1;i++) { //cout<<k[i]<<" "; if(k[i]==1) { cout<<i+1<<" "; } } cout<<"站加油"; // cout << "Hello world!" << endl; return 0; }