题目介绍
某村庄有一口公共水井,为了保护该水井及饮用水的质量,当地规定当该水井内的水量不高于100时,禁止取水6小时,在此期间,水井水量自动恢复到最大容量1000;如果预计村民当次取水后水量低于100,则拒绝该村民本次取水。
其实每个村民自家也有口水井,自家的水井容量各不相同,范围在(100,200]内。村民优先去公共水井取水,若发现公共水井禁止取水或因容量不够拒绝取水时,再从自家水井取水。
自家水井容量不高于100时,禁止取水1小时,在此期间,水井水量自动恢复到初始水量;如果预计村民当次取水后水量低于100,则允许该村民本次从自家水井取水至水井容量到100。
请模拟两个村民用水情况:先设置公共水井水量及两位村民自家水井容量,再模拟村民1取水,村民2取水,村民1再次取水,村民2再次取水的情形。村民每次取水时需输入年、月、日、时、分、秒和取水量,若成功从公共水井取水则输出“public:m”形式,m表示公共水井剩余水量;若成功从自家水井取水则输出“private:n”形式,n表示自家水井剩余水量; 若没有取到水,则输出“wait”。
输入
公共水井初始水量(可以比1000小),两位村民自家水井水量(最大容量,也是初始水量),两位村民两次交替取水情况
输出
每次取水后的情况
样例输入 Copy
1000 150 200 2022 3 1 18 25 30 800 2022 3 1 20 25 20 150 2022 3 1 23 25 19 100 2022 3 2 6 25 25 150
样例输出 Copy
public:200 private:100 public:100 public:850
import java.time.LocalDateTime;
import java.util.Scanner;
public class Main {
public static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
Well.setPubWater(input.nextInt());
Well people1 = new Well();
Well people2 = new Well();
people1.setPriWater(input.nextInt());
people2.setPriWater(input.nextInt());
int[] time = new int[6];
for (int i = 0; i < 2; i++) {
LocalDateTime n1 = LocalDateTime.of(input.nextInt(),input.nextInt(),input.nextInt(),input.nextInt(),input.nextInt(),input.nextInt());
int wantUse = input.nextInt();
if(!people1.usePub(n1, wantUse)) {
people1.usePri(n1, wantUse);
}
LocalDateTime n2 = LocalDateTime.of(input.nextInt(),input.nextInt(),input.nextInt(),input.nextInt(),input.nextInt(),input.nextInt());
int wantUse2 = input.nextInt();
if(!people2.usePub(n2, wantUse2)) {
people2.usePri(n2, wantUse2);
}
}
}
}
class Well {
private static int pubWater;
private static int pubMark = 1000;
private static String pubCondition = "open";
private static LocalDateTime pubTime;
private int priWater;
private int priMark;
private String priCondition = "open";
private LocalDateTime priTime;
public static int getPubWater() {
return pubWater;
}
public static void setPubWater(int pubWater) {
Well.pubWater = pubWater;
}
public int getPriWater() {
return priWater;
}
public void setPriWater(int priWater) {
priMark = priWater;
this.priWater = priWater;
}
public boolean usePub(LocalDateTime time, int wantUse) {
boolean mark;
if (pubCondition.equals("open") || pubCondition.equals("close") && time.isAfter(pubTime)) {
pubCondition = "open";
if (pubWater - wantUse >= 100) {
pubWater -= wantUse;
System.out.println("public:" + pubWater);
mark = true;
} else {
mark = false;
}
} else {
mark = false;
}
if (pubWater == 100) {
pubTime = time.plusHours(6);
pubWater = pubMark;
pubCondition = "close";
}
return mark;
}
public void usePri(LocalDateTime time, int wantUse) {
if (priCondition.equals("open") || priCondition.equals("close") && time.isAfter(priTime)) {
priCondition = "open";
if (priWater > 100) {
if (priWater - wantUse >= 100) {
priWater -= wantUse;
System.out.println("private:" + priWater);
} else {
priWater = 100;
System.out.println("private:" + priWater);
}
}
}else {
System.out.println("wait");
}
if (priWater == 100) {
priTime = time.plusHours(1);
priWater = priMark;
priCondition = "close";
}
}
}