提高题二: 汽车加油问题
一、实验目的与要求
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+"次。");
- }
- }
结果:
本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/824850