PTA汽车加油问题(java版)

7-40 汽车加油问题 (20 分)

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

一辆汽车加满油后可行驶 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

 反思与总结:此题看了一会不知道为啥有8个节点,后来才发现,是开始和尾部,然后,0到目的地的距离,后来发现对了。然后,开始抱着试试的 态度,写了一下 ,大致思路如下:开始定义一个计数器,然后定义一个变量,然后定义一个求和,当求和大于n,然后把上一步i减一。具体代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException{
        BufferedReader sr = new BufferedReader(new InputStreamReader(System.in));
        int sum =0;
        int count = 0;
        int flag =0;
        int n = Integer.parseInt(sr.readLine().split(" ")[0]); //得到n的值也就是能跑多少距离
        String s [] = sr.readLine().split(" "); //输入一行距离
        int ff[] = new int [s.length];
        for(int i=0;i<s.length;i++) {
            ff[i]=Integer.parseInt(s[i]); //把各个距离转为整数,为什么这样转,因为Scanner太浪费时间了
        }
        for(int i=0;i<ff.length;i++) {
            sum=sum+ff[i]; //累计求和
            if(ff[i]>n) { //如果大于n说明距离跑不到直接退出就行了
                flag=1; //定义变量的输出方式
                break;
            }
            if(sum>n) {
                count=count+1;//如果大于n说明下一个肯定不行所以加一,然后退到上一个
                sum=0;
                i--;
            }
        }
        if(flag==1) {
            System.out.println("No Solution!");
        }else{
            System.out.println(count);
        }
    }
}
 

猜你喜欢

转载自blog.csdn.net/qq_41479464/article/details/88368853