【编程题】

某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息两天。

上级要求每个人每周的工作日和休息日必须是固定的,不能在周间变更。

此外,由于工作需要,还有如下要求:

1. 所有人的连续工作日不能多于3天(注意:周日连到下周一也是连续)。

2. 一周中,至少有3天所有人都是上班的。

3. 任何一天,必须保证 A B C D 中至少有2人上班。

4. B D E 在周日那天必须休息。

5. A E 周三必须上班。

6. A C 一周中必须至少有4天能见面(即同时上班)。

你的任务是:编写程序,列出ABCDE所有可能的一周排班情况。工作日记为1,休息日记为0

A B C D E 每人占用1行记录,从星期一开始。

【输入、输出格式要求】

程序没有输入,要求输出所有可能的方案。

每个方案是7x5的矩阵。只有1和0组成。        

矩阵中的列表示星期几,从星期一开始。

矩阵的行分别表示A,B,C,D,E的作息时间表。

多个矩阵间用空行分隔开。

例如,如下的矩阵就是一个合格的解。请编程输出所有解。

0110111

1101110

0110111

1101110

1110110


public class RiCheng
{
static int N = 0; public static void show(int[][] a)
{
for(int i=0; i<5; i++)
{
for(int j=0; j<7; j++)
{
System.out.print(a[i][j]);
}
System.out.println();
}
} public static void ping_jia(int[][] a)
{
// 连续工作不多于3天
for(int i=0; i<5; i++)
{
int sum = 0;
for(int j=0; j<14; j++)
{
if(a[i][j%7]==0)
sum = 0;
else
{
sum++;
if(sum>3) return;
}
}
} // 至少有3天所有人都上班
int k = 0;
for(int i=0; i<7; i++)
{
if(a[0][i]==0 || a[1][i]==0 || a[2][i]==0 || a[3][i]==0 || a[4][i]==0) k++;
}
if(k==7||k==6||k==5) return; // A B C D 中保证有2人上班
for(int i=0; i<7; i++)
{
int m = 0;
if(a[0][i]==1) m++;
if(a[1][i]==1) m++;
if(a[2][i]==1) m++;
if(a[3][i]==1) m++;
if(m<2) return;
} // B D E 周日必须休息
if(a[1][6]==1 || a[3][6]==1 || a[4][6]==1) return; // A E 周三必须上班
if(a[0][2]==0 || a[4][2]==0) return; // A 与 C 一周中必须至少有4天能见面
k=0;
for(int i=0; i<7; i++)
{
if(a[0][i]==1 && a[2][i]==1) k++;
}
if(k<4) return; N++; show(a);
System.out.println("");
} public static void f(int[][] a, int row)
{
if(row==5)
{
ping_jia(a);
return;
} for(int i=0; i<7; i++)
{
for(int j=i+1; j<7; j++)
{
for(int k=0; k<7; k++) a[row][k] = 1;
a[row][i] = 0;
a[row][j] = 0; f(a, row+1);
}
}
} public static void main(String[] args)
{
int[][] a = {{1,1,1,1,1,0,0},{1,1,1,1,1,0,0},{1,1,1,1,1,0,0},
{1,1,1,1,1,0,0},{1,1,1,1,1,0,0},}; f(a,0); System.out.println("N=" + N);
}
}

java实现日程表的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 递归与分治策略之循环赛日程表Java实现

    递归与分治策略之循环赛日程表 一.问题描述 设有n=2^k个运动员要进行网球循环赛.现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能参赛一 ...

  3. dhtmlxScheduler日历日程控件包括天视图,周视图,月视图,年视图和日程表视图

    dhtmlxScheduler 是一个基于Web的类似于Outlook的日历日程控件. 它完全由javascript/js/css编写, 提供类似于MS Outlook Calendar, Apple ...

  4. 在Java中谈尾递归--尾递归和垃圾回收的比较(转载)

    我不是故意在JAVA中谈尾递归的,因为在JAVA中谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好 不过也是因为要绕几个弯,所 ...

  5. Jenkins去GitLab拉取Java代码自动打包

    jenkins的部署 一.部署git 1)先检查系统是否已经自带了git,如果有,就卸载 $ rpm -qa | grep git && rpm -e git --nodeps 2)开 ...

  6. Java相关英语单词

    day1 Java概述 掌握 .JDK abbr. Java开发工具包(Java Developer's Kit) (abbr.缩写) .JRE abbr. Java运行环境(Java Runtime ...

  7. 在Java中谈尾递归--尾递归和垃圾回收的比较

    我不是故意在JAVA中谈尾递归的,因为在JAVA中谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好 不过也是因为要绕几个弯,所 ...

  8. java的开发步骤----

    首先老师给了一个 视频给我:叫我理解java的简单开发步骤: 上两张图: 然后我就理解成了这样::: 简述java开发步骤:第一步: 编写源代码,把源代码写好 :第二部:源代码通过编译器编译成字节码c ...

  9. 算法(Java实现)—— 分治算法

    分治算法 分治算法的设计模式 基本思想 把复杂问题分解成若干互相独立容易求解的子问题 经典问题 二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表 汉诺塔 ...

随机推荐

  1. dot 使用教程

    dot使用教程 安装: windows: 安装后需要将安装文件的bin目录添加到命令行, 可以在命令行生成图片 linux: mac: dot和vscode 安装插件:Graphviz (dot) l ...

  2. xilinx VDMA IP核使用

    VDMA实用配置说明 VDMA是通过AXI Stream协议对视频数据在PS与PL端进行搬运,开发者无需关注AXI Stream协议,在BlockDesign设计中只需要把相应信号进行连接即可. VD ...

  3. 部署SSL站点 IIS+asp.net

    使用SSL必须要有证书,今天我们就使用IIS内置的证书完成SSL的部署. 1.打开MMC证书管理器,文件->添加/删除管理单元->证书,双击->确定 2.找到:个人->证书下有 ...

  4. 《学习笔记》.NET Core API搭建

    1.创建 ASP.NET Core Web程序,记住取消HTTPS配置 2.此时一个简单的.NET Core API 架子搭建好了,细心的人可以发现Properties下面不是CS文件,确是launc ...

  5. JQ选择器-选择符合条件的元素,获取对应关系元素

    如果你想寻找id以“sub_”开头的元素,你可以使用: $("*[id^='sub_']") 如果你想寻找id以“trim”结尾的元素,你可以使用: $("*[id$=' ...

  6. 桥接模式(c++实现)

    外观模式 目录 外观模式 模式定义 模式动机 UML类图 源码实现 优点 缺点 总结 模式定义 桥接模式(Bridge),将抽象部分与它的实现部分分离,使他们都可以独立的变化.什么叫抽象与他的实现分离 ...

  7. 转帖 支撑4.5亿活跃用户的WhatsApp架构概览

    http://www.csdn.net/article/2014-02-27/2818559-an-overview-at-whatsapp's-19b-architecture/2 写的很好,确实牛 ...

  8. 类linux 系统上端口被占用

    好几次遇到这问题,明明Ctrl+C退出了node,但是下次启动的时候总是会报错: listen EADDRINUSE :::80 之类的. 这时候可能是被占用,也可能是上次进程没有真的退出. ps - ...

  9. fastDFS多线程并发执行出现的问题

    ---------------------  原作者:Java高级开发  来源:CSDN  原文:https://blog.csdn.net/hang1995/article/details/7924 ...

  10. 通过adb调试Unity开发的安卓应用

    命令: 1. adb logcat -s Unity 2. adb | grep Unity