From 5d9a5dda108ada14974a55b514478ac0be4bf5b4 Mon Sep 17 00:00:00 2001
From: jsh <1209700525@qq.com>
Date: Sat, 11 Oct 2025 20:45:59 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug=EF=BC=8C=E5=AE=8C?=
=?UTF-8?q?=E6=88=90=E5=9F=BA=E6=9C=AC=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/encodings.xml | 1 +
.idea/misc.xml | 2 +-
src/main/java/com/dota/Main.java | 59 +++++++++++++++--------
src/main/java/com/dota/domain/Doctor.java | 9 ++--
4 files changed, 44 insertions(+), 27 deletions(-)
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 63e9001..aa00ffa 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index c5772e2..98ab84f 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -8,5 +8,5 @@
-
+
\ No newline at end of file
diff --git a/src/main/java/com/dota/Main.java b/src/main/java/com/dota/Main.java
index c85738e..e728e4a 100644
--- a/src/main/java/com/dota/Main.java
+++ b/src/main/java/com/dota/Main.java
@@ -4,6 +4,7 @@ import com.dota.domain.Doctor;
import com.dota.domain.Week;
import com.dota.domain.WorkEnum;
+import java.util.ArrayList;
import java.util.Arrays;
public class Main {
@@ -15,6 +16,11 @@ public class Main {
static Doctor zh;
static Doctor tgy;
+ // 日期
+ static int days = 0;
+ // 医生下标
+ static int idx = 0;
+
public static void main(String[] args) {
init();
var doctorOrder = new Doctor[]{
@@ -56,15 +62,9 @@ public class Main {
}
static void schedule(Doctor[] doctors, Doctor[] outputOrder) {
- // 日期
- int days = 0;
- // 医生下标
- int idx = 0;
-
for (int k = 0; k < 2; k++) {
for (int i = 0; i < 7; i++) {
var d = doctors[idx];
-
if (d.firstRest) {
d.firstRest = false;
d.works[0] = WorkEnum.HOLIDAY;
@@ -92,7 +92,7 @@ public class Main {
}
days = (days + 1) % 7;
- idx = (idx + 1) % doctors.length;
+ idx = (idx + 1) % 6;
}
fix(doctors);
@@ -104,28 +104,45 @@ public class Main {
}
}
+ record Rest(int day, int cnt) {
+ }
+
// 给有调休的安排休息
// 保证同一组必须有一个在
static void rest(Doctor[] doctors) {
+ var list = new ArrayList();
+ for (int i = 0; i < 5; i++) {
+ list.add(new Rest(i, 0));
+ }
+
for (Doctor doctor : doctors) {
- if (doctor.lastRestCount == 0) {
- continue;
- }
-
- int count = 0;
- for (int j = 0; j < 5; j++) {
- if (checkRest(j, doctor, doctors)) {
- doctor.works[j] = WorkEnum.REST;
- count++;
- }
-
- if (count==doctor.lastRestCount) {
- break;
+ for (int i = 0; i < 5; i++) {
+ if (doctor.works[i] == WorkEnum.DUTY || doctor.works[i] == WorkEnum.WORK) {
+ list.set(i, new Rest(i, list.get(i).cnt + 1));
}
}
}
+
+ list.sort((a, b) -> b.cnt - a.cnt);
+
for (Doctor doctor : doctors) {
- doctor.lastRestCount = doctor.restCount;
+ if (doctor.restCount == 0) {
+ continue;
+ }
+
+ int i = 0;
+ int j = 0;
+ while (i < doctor.restCount) {
+ Rest r = list.get(j++);
+ if (checkRest(r.day, doctor, doctors)) {
+ j = 0;
+ doctor.works[r.day] = WorkEnum.REST;
+ i++;
+ list.add(new Rest(r.day, r.cnt - 1));
+ list.remove(r);
+ list.sort((a, b) -> b.cnt - a.cnt);
+ }
+ }
}
}
diff --git a/src/main/java/com/dota/domain/Doctor.java b/src/main/java/com/dota/domain/Doctor.java
index 3f017fa..3dca8b4 100644
--- a/src/main/java/com/dota/domain/Doctor.java
+++ b/src/main/java/com/dota/domain/Doctor.java
@@ -2,9 +2,7 @@ package com.dota.domain;
public class Doctor {
public String name;
- // 上周的调休
- public int lastRestCount;
- // 下周的调休
+ // 周五六日值班的调休
public int restCount = 0;
// 门诊时间
@@ -34,6 +32,7 @@ public class Doctor {
}
public void reset() {
+ this.restCount = 0;
for (int i = 0; i < 5; i++) {
works[i] = WorkEnum.WORK;
}
@@ -44,8 +43,8 @@ public class Doctor {
switch (name) {
case "周晖" -> works[1] = WorkEnum.OPD;
case "唐婷婷" -> works[2] = WorkEnum.OPD;
- case "李宁" -> works[3] = WorkEnum.OPD;
- case "章亮" -> works[4] = WorkEnum.OPD;
+ case "李宁" -> works[4] = WorkEnum.OPD;
+ case "章亮" -> works[3] = WorkEnum.OPD;
}
}