提高題二: 汽車加油問題
一、實驗目的與要求
1、掌握汽車加油問題的算法;
2、進一步掌握貪心算法;
二、實驗題
一輛汽車加滿油後可以行駛N千米。旅途中有若干個加油站。若要使沿途的加油次數最少,設計一個有效的算法,指出應在那些加油站停靠加油。並證明你的算法能產生一個最優解。
三、實驗提示
把兩加油站的距離放在數組中,a[1..n]表示從起始位置開始跑,經過n個加油站,a[k]表示第k-1個加油站到第k個加油站的距離。汽車在運行的過程中如果能跑到下一個站則不加油,否則要加油。
三、源代碼
- import java.util.*;
- import java.io.*;
- public class SF_QicheJiayouzhan
- {
- public static int greedy(int x[],int n){
- int sum=0,
- k=x.length,
- s=0;
- for (int j=0;j<k ;j++ )
- {
- if (x[j]>n)
- {
- System.out.println("無法到達目的地!!!");
- return -1;
- }
- }
- for (int i=0;i<k ;i++ )
- {
- s+=x[i];
- if (s>n)
- {
- sum++;
- s=x[i];
- }
- }
- return sum;
- }
- public static void main(String[] args)
- {
- Scanner read =new Scanner(System.in);
- System.out.println("請輸入汽車加滿油一次最大行駛旅程:");
- int n=read.nextInt();
- System.out.println("請輸入加油站個數:");
- int num=read.nextInt();
- int a[]=new int[num];
- System.out.println("請輸入每個加油站的相隔距離:");
- for (int i=0;i<num ;i++ )
- {
- a[i]=read.nextInt();
- }
- int q=greedy(a,n);
- System.out.println("要加油"+q+"次。");
- }
- }
結果: