题目描述:一辆汽车加满油后可行驶n km。旅途中有k个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
1.贪心算法解决
简单思路:为使加油次数最少,则每次开到尽量远的加油站加油。也就是说不得不加油的时候。如:到了一个加油站正好没油。到了一个加油站不加油,剩余油不够开到下一个加油站。
代码如下:
package 算法设计与分析;
import java.util.Scanner;
public class 虚拟汽车加油问题 {
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
System.out.print("请输入汽车满油行驶路程:");
int k = inScanner.nextInt();
System.out.print("请输入加油站数量:");
int n = inScanner.nextInt();
int[] a = new int[n+1];
System.out.print("请输入每个加油站之间的距离:");
for (int i = 0; i <= n; i++) {
a[i] = inScanner.nextInt();
}
Solve(n, k, a);
}
public static void Solve(int m,int s, int b[]) {
int sum = 0,count = 0;
for (int i = 0; i <= m; i++) {
if(b[i] > s)
System.out.print("NO Solution!");
}
for (int i = 0; i <= m; i++) {
sum += b[i];
if(sum == s) {
count++;
sum = 0;
}
if(sum > s) {
count++;
i = i-1;
sum = 0;
}
}
System.out.print("最少加油次数为:"+count);
}
}
示例输入输出:
学习中,欢迎交流