Java教程

汽车加油问题 贪心算法

本文主要是介绍汽车加油问题 贪心算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

汽车加油问题

描述:

题目来源:王晓东《算法设计与分析》

一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。

输入格式:

第一行有 2 个正整数n和 k(k<=1000 ),表示汽车加满油后可行驶n公里,且旅途中有 k个加油站。 第二行有 k+1 个整数,表示第 k 个加油站与第k-1 个加油站之间的距离。 第 0 个加油站表示出发地,汽车已加满油。 第 k+1 个加油站表示目的地。

输出格式:

输出最少加油次数。如果无法到达目的地,则输出“No Solution!”。

输入样例:

7 7
1 2 3 4 5 1 6 6

输出样例:

4

import java.util.Scanner;
@SuppressWarnings("all")
public class Automobile_refueling_problem {//汽车加油问题  贪心算法
    public static void main(String args[]){
        int n,k;
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();//加满一次有最远可以跑n公里
        k = scanner.nextInt();//途中有多少个加油站
        int []distance = new int[k + 1];
        for(int i = 0;i <= k;i++){
            distance[i] = scanner.nextInt();
            if(distance[i] > n){
                System.out.print("“No Solution!”");
                System.exit(0);
            }
        }
        int sum = n,num = 0;
        for(int i = 0;i <= k;i++){
            sum -= distance[i];
            if(i != k && sum < distance[i + 1]){//当没到达目的地且剩下的油不够到达下一个目的地 就加油
                num++;
                sum = n;
            }
            if(sum < 0){
                num++;
            }
        }
        System.out.println(num);
    }
}

这篇关于汽车加油问题 贪心算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!