首先是 设置好int[] xuqiu = {60,70,60,50,20,30,...};  //42个需求,代表一周分成42个班次,每个班次的需求人数。main函数里面的 text1.anpaifangjia(203); 中203代表  是   向上取整((60+70+60+50+20+30)*4/40*7)
package text1;import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;public class text1 {int[] xuqiu = {60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30,60,70,60,50,20,30};int[] xuqiuleijia = new int[42];//需求数量临时保存int[][] husishnagabncishu;  //每天  2班int[][] paiban;Map<Integer,int[]> map;public static void main(String[] args) {text1 text1 = new text1();text1.anpaifangjia(203);}/*** 安排放假* */public void anpaifangjia(int paibanlen){/* Map 格式*  一                     二                     三                     四                     五                     六                     七* 1,3,5     2,4     4,6       ...............* */int perlen = paibanlen;//行数  x2 求放假数int intpersoncount = perlen*2;//行数  x2 求放假数int chu = intpersoncount/7;//求余int yu = intpersoncount%7;//求余paiban = new int[perlen][42];map = new HashMap<Integer,int[]>();//保存 每天  放假 人的 序号for(int x = 0;x<7;x++){int[] i = new int[chu];if(yu > 0){i = new int[chu + 1];yu--;}map.put((x+1), i);}int[] arr;int per = 1;int m = 0;for(int r = 0;r<intpersoncount;r++){m++;if(m > 7) m = 1;// 1~7循环arr = map.get(m);if(Arrays.binarySearch(arr, per) < 0){//判断是否不存在for(int i=0,len=arr.length;i<len;i++){if(arr[i] == 0){System.out.println("第"+(m) +"组:"+ per);arr[i] = per;per++;if(per > perlen) {per = 1;}break;}}map.put(m, arr);}else {per++;if(per > perlen) {per = 1;}r--;m--;}}for(int r = 0;r<perlen;r++){for(int c = 0;c<42;c++){if((c+1) %6 ==1){System.out.print(" ");}m = (c+1)/6;if((c+1)%6>0) m++;arr = map.get(m);Arrays.sort(arr); //首先对数组排序if(Arrays.binarySearch(arr, (r+1)) > -1){paiban[r][c] = 0;System.out.print(paiban[r][c] +" ");continue;}else {paiban[r][c] = 2;System.out.print(paiban[r][c] +" ");}}System.out.println();}paiban(perlen);}/*** 算出 隔班 安排* husishu 人数* */private void paiban(int husishu){System.out.println("----------------------------------------------------show1");husishnagabncishu = new int[husishu][7];//每天  2班for(int r = 0;r<husishu;r++){for(int c = 0;c<42;c++){if(paiban[r][c] == 0){paiban[r][c] = 0;}else {if(xuqiushu1(r,xinqi(c))){paiban[r][c] = 1;if(c - 1 > -1){if(paiban[r][c-1] == 1){paiban[r][c] = 0;}}xuqiuleijia[c] = xuqiuleijia[c] + paiban[r][c];husishnagabncishu[r][xinqi(c)] += paiban[r][c]; }else {paiban[r][c] = 0;}}}}show(husishu);paiban2(husishu);}/*** 整理  顺对换* husishu 人数* */private void paiban2(int husishu){System.out.println("----------------------------------------------------show2");for(int r = 0;r<husishu;r++){for(int c = 0;c<42;c++){if(xuqiushu(c)){if(paiban[r][c] != 0){duihuan(r,c);}}husishnagabncishu[r][xinqi(c)] += paiban[r][c];}}show(husishu);paiban3(husishu);}/*** 整理  倒对换* husishu 人数* */private void paiban3(int husishu){System.out.println("----------------------------------------------------show3");for(int r = 0;r<husishu;r++){for(int c = 41;c>-1;c--){if(xuqiushu(c)){if(paiban[r][c] != 0){duihuan1(r,c);}}husishnagabncishu[r][xinqi(c)] += paiban[r][c];}}show(husishu);}private void show(int husishu){String ss = "";husishnagabncishu = new int[husishu][7];//每天  班次for(int r = 0;r<husishu;r++){ss = (r+1)<100?(r+1)<10?"00"+(r+1):"0"+(r+1):(r+1)+"";System.out.print("护士: " +ss+":");for(int c = 0;c<42;c++){if((c+1) %6 ==1){System.out.print(" ");}husishnagabncishu[r][xinqi(c)] += paiban[r][c]; System.out.print(paiban[r][c] +" ");}int s = 0;for(int j = 0 ;j< 7;j++){s +=husishnagabncishu[r][j];}System.out.println("  一周工作:"+s);}for(int c = 0;c<42;c++){int cc= 0;for(int r = 0;r<husishu;r++){if(paiban[r][c] == 1){cc++;}}System.out.print(" 第 " + (c+1) +"列:" +cc);}System.out.println();}private boolean xuqiushu1(int c){  //满足每个时段需求 数量if(xuqiuleijia[c] < xuqiu[c]){return true;}return false;}private boolean xuqiushu(int c){  //满足每个时段需求 数量if(xuqiuleijia[c] > xuqiu[c]){return true;}return false;}private void duihuan(int r, int c){//顺对换int m;// i  的星期 几int currm;//当前 星期几int[] arr;//星期 几  的 放假  数组currm = (c+1)/6;if((c+1)%6 != 0)currm++;for(int i = c + 1;i<42;i++){m = i/6;if(i%6 != 0) m++;arr = map.get(m);Arrays.sort(arr); //首先对数组排序if(Arrays.binarySearch(arr, (r+1)) > -1){//不能 与 放假 对换continue;}if(currm != m){if(istowban(r,i)){continue;}}if(xuqiushu1(i)){if(paiban[r][i] == 0){paiban[r][i] = paiban[r][c];xuqiuleijia[c] = xuqiuleijia[c] - paiban[r][c];paiban[r][c]= 0;xuqiuleijia[i] = xuqiuleijia[i] + paiban[r][i];return;}}}}private void duihuan1(int r, int c){//倒对换int m;// i  的星期 几int currm;//当前 星期几int[] arr;//星期 几  的 放假  数组currm = (c+1)/6;if((c+1)%6 != 0)currm++;for(int i=c-1;i>0;i--){m = i/6;if(i%6 != 0) m++;arr = map.get(m);Arrays.sort(arr); //首先对数组排序if(Arrays.binarySearch(arr, (r+1)) > -1){//不能 与 放假 对换continue;}if(currm != m){if(istowban(r,i)){continue;}}if(xuqiushu1(i)){if(paiban[r][i] == 0){paiban[r][i] = paiban[r][c];xuqiuleijia[c] = xuqiuleijia[c] - paiban[r][c];paiban[r][c]= 0;xuqiuleijia[i] = xuqiuleijia[i] + paiban[r][i];return;}}}}private boolean istowban(int r,int c){//第 r 人在 这天  是否不是  2班 or 以上  int count = 0;int m;int col = 0;m = (c+1)/6;if((c+1)%6>0) m++;col = (m - 1)*6;for(int j =0;j<6;j++){if(paiban[r][col] == 1){count++;if(count>1){return true;}}col++;}return false;}private boolean xuqiushu1(int r,int c){  //满足每天 8小时   2班if(husishnagabncishu[r][c] >= 2){return false;}int intzhoubanci = 0;for(int col = 0;col < 7;col++){intzhoubanci  += husishnagabncishu[r][col];}      if(intzhoubanci >= 10){return false;}return true;}private int xinqi(int banci){//根据  一周42班次 返回  星期几Double double1 = (double) (banci/6);        return (int) Math.floor(double1);}
}

java护士排班 test 根据 1天24小时分成6班,一个护士一天上8个小时,一周上40小时,进行一周排班安排!拷贝,直接运行。相关推荐

  1. java 9行代码_GitHub - lqy0702/RxjavaYxj: 可能是迄今为止最简洁,最形象化的Rxjava核心源码讲解。理解9行核心代码,带你完全掌握Rxjava运行机制。...

    本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发 你是不是看过了很多分析Rxjava源码的文章,但依旧无法在心中勾勒出Rxjava原理的样貌.是什么让我们阅读Rxj ...

  2. 就在刚刚这份java八股文成功让我进入字节,拿到了人生第一个18k

    一.java基础 1.面向对象的三个基本特征? 面向对象的三个基本特征是:封装.继承和多态. 继承:让某个类型的对象获得另一个类型的对象的属性的方法.继承就是子类继承父类的特征和行为,使得子类对象(实 ...

  3. Java网络编程从入门到精通(24):实现HTTP断点续传下载工具(附源代码)

    源代码下载:download.rar 在前面的文章曾讨论了HTTP消息头的三个和断点继传有关的字段.一个是请求消息的字段Range,另两个是响应消息字段Accept-Ranges和Content-Ra ...

  4. 小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过 250250 立方厘米的等量橡皮泥,教大家做泥塑。在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥

    小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过 250 立方厘米的等量橡皮泥,教大家做泥塑.在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,于是她决定,在正式 ...

  5. java 中括号中的语句,Java中是使用大括号括起来的语句块,用于完成一个相对独立的逻辑功能,这种语句被称作()。...

    Java中是使用大括号括起来的语句块,用于完成一个相对独立的逻辑功能,这种语句被称作(). 更多相关问题 下列哪项措施不能提高砌体受压构件的承载力()? 商业银行办理个人储蓄存款业务,应当遵循地原则( ...

  6. java时间转化类,一小时前,刚刚一个月前

    为什么80%的码农都做不了架构师?>>>    import java.text.ParseException; import java.text.SimpleDateFormat; ...

  7. 编写程序FooBizBaz.java,从1循环到150并且在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。

    (for语句练习)编写程序FooBizBaz.java,从1循环到150并且在每行打印一个值,另外在每个3的倍数行上打印出"foo",在每个5的倍数行上打印"biz&qu ...

  8. 知其然(3)*.java文件中可以包含多个类,但最多只能有一个类,其修饰符为public

    *.java文件中可以包含多个类,但最多只能有一个类,其修饰符为public. 测试1:文件名Dog.java,文件内容如下:[2个类均为public] public class Dog{Dog(){ ...

  9. “2017面向对象程序设计(Java)第十一周学习总结”存在问题的反馈及教学安排...

    "2017面向对象程序设计(Java)第十一周学习总结"存在问题的反馈及教学安排 1."提出表扬的同学:姜依萍,王雪玲,徐楠,相文君,赵晓 未提交作业的同学:任红强,王瑞 ...

最新文章

  1. python 列表生成式_python 列表生成式 List Comprehensions
  2. 零基础,快速安装dedeCMS 搭建网站 - 总结大全
  3. 正交试验设计例题及答案_2020年一级建造师《市政工程》模拟试题及答案(5)...
  4. 使用Jenkins搭建持续集成环境的方法(三)
  5. 【转】 sqlserver 异地备份
  6. 角度和弧度之间的转换
  7. 极值理论(一):极大值极限分布
  8. coursera 吴恩达四卷积神经网络第四周 Art Generation with Neural Style Transfer
  9. 用python编写一个篮球计分系统_毕业设计(3)基于MicroPython的篮球计时计分器模型的设计与实现...
  10. Unity IOS游戏内好评
  11. 微信公众号根据openid获取unionid
  12. Juc07_乐观锁和悲观锁、公平锁和非公平锁、递归锁(可重入锁)、死锁及排查、自旋锁
  13. xcode中gdb调试命令
  14. 办公室内网监控软件 泄密案件逐年上升
  15. Python 利用百度文字识别 API 识别并提取图片中文字
  16. aerospike mysql_Aerospike配置
  17. SSM项目之商铺系统-店铺注册之js实现和店铺类别、区域信息的获取(十一)
  18. 【STM32-库函数】光照强度传感器BH1750 GY-30
  19. sinx除以x²积分怎么算
  20. UAV021(三):九轴传感器(加速度计、陀螺仪和磁力计)校准方法

热门文章

  1. python编程实例集合-编程小白如何结合量化实例学习python量化建模?
  2. Lombok实现原理解析
  3. R语言入门之Hello world
  4. mysql数据库容量估算_数据库性能与容量评估
  5. STM32F030 多通道ADC DMA采集
  6. STM32IO模拟串口接收发送(stm32f030)
  7. 防欺诈盗号,请勿支付或输入qq密码
  8. 越想越难,越做越简单,电磁兼容性设计
  9. 直播软件源码开发,直播间内消息系统的实现
  10. 辐射3游戏登录是提示计算机丢失xlive.dll文件,win10系统玩辐射3丢失xlive.dll怎么解决...