首页 > 试题广场 >

游泳池-研发

[编程题]游泳池-研发
  • 热度指数:2775 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解

小明作为一个游泳池管理员,以玩弄给水管和排水管为乐,也因此产生了很多数学题考验小朋友。

现在小明想把这个行动升级,考验一下程序员,做了一个自动装置来控制给水管和排水管。在开始时,给水管和排水管都是打开状态的,并且游泳池里没有水。在自动装置的作用下,每经过t1分钟,给水管的状态都会改变,即从打开状态变为关闭状态或从关闭状态变为打开状态,而同时每经过t2分钟,排水管的状态也会改变。当给水管打开时,给水管每分钟会向游泳池里注入m1升水;当排水管打开时,排水管每分钟会把游泳池里水排走m2升;当给水管和排水管同时打开时,游泳池的水量变化为每分钟(m1-m2)升。当然泳池的水量不能变为负数,同时泳池也有个最大容量m,水量不能超过m升。那么经过t分钟后,游泳池里有多少升水?


输入描述:
输入第一行为一个正整数T,表示有T组数据。

每组数据的为一行包含六个整数,分别表示m, t, m1, t1, m2, t2。

数据范围:

对于所有数据,满足1<=T<=10, 1<=m<=100000, 1<=t<=86400, 1<=m1,m2<=100, 1<=t1,t2<=10。


输出描述:
对于每一个数据,输出一行,包括一个整数,为在t分钟后游泳池中的水量。
示例1

输入

5
10 2 1 5 2 5
10 2 10 5 2 5
10 2 3 5 2 5
100 100 3 4 4 3
10000 1000 10 5 5 3

输出

0
10
2
3
2495
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        Scanner in = new Scanner(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Solver solver = new Solver();
        int testCount = Integer.parseInt(in.next());
        for (int i = 1; i <= testCount; i++)
            solver.solve(i, in, out);
        out.close();
    }

    static class Solver {
        public void solve(int testNumber, Scanner in, PrintWriter out) {
            int m = in.nextInt();
            int t = in.nextInt();
            int m1 = in.nextInt();
            int t1 = in.nextInt();
            int m2 = in.nextInt();
            int t2 = in.nextInt();
            out.println(volume(m, t, m1, t1, m2, t2));
        }

        private int volume(int m, int t, int m1, int t1, int m2, int t2) {
            int volume = 0;
            boolean input = true;
            boolean output = true;
            for (int i = 1; i <= t; i++) {
                if (i % t1 == 0) {
                    input = !input;
                }
                if (i % t2 == 0) {
                    output = !output;
                }
                if (input && output) {
                    volume += m1 - m2;
                } else if (input) {
                    volume += m1;
                } else if (output) {
                    volume -= m2;
                }
                volume = volume > m ? m : volume;
                volume = volume < 0 ? 0 : volume;
            }
            return volume;
        }
    }
}

不知道那里错了,但输出的答案和题目的答案有点差异:
0
10
2
3
2500
编辑于 2019-12-20 10:28:51 回复(2)