【编程题】

某保密单位机要人员 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. HTTP Strict Transport Security (通常简称为HSTS)

    HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式. Freebuf百科:什么是Str ...

  2. C/C++数组和指针详解

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

  3. linux --自已的域名无法登陆机器的解决办法:同步时间

    昨天发现自己的域名无法访问host了,因此我们测试环境便无法安装,显示SSH not connectted ,随后发现时间不同步: 因此以下命令可以实现时间同步: /opt/quest/bin/vas ...

  4. iOS事件的响应和传递机制

    跟二狗子哥哥交流的时候,他总说我,说的过程太业余.故 好好学习整理一下.努力不那么业余. 一.事件的产生.传递.响应: 1.事件从父控件依次传递到子控件,寻找最合适的子控件View. 2.寻找最合适的 ...

  5. wordpress另一更新正在进行

    登录mysql,然后进入wordpress数据库, use wordpress select * from wp_options where option_name='core_updater.loc ...

  6. flask之Flask-session三方组件

    from flask import Flask, views, render_template, request, session, redirect import redis as redis #p ...

  7. 3.1Go变量

    3.1 Go变量 变量是对内存中数据存储空间的表示,如同门牌号对应着房间,同样的,变量名字对应变量的值. 变量:本质就是一块内存空间.用于存储某个数值.该数值在运行时可以改变. 变量使用步骤 1.声明 ...

  8. orcle报错:ORA-12737:Instant Client Light:unsupported server character set ZHS16GBK

    我们用Navacat连接Oracle数据库的时候,会提示ORA-12737:Instant Client Light:unsupported server character set ZHS16GBK ...

  9. 1.scrapy框架

    Scrapy 是一个基于 Twisted 的异步处理框架.异步就是说调用在发出之后,这个调用就直接返回,不管有没有结果.(非阻塞关注的是程序在等待调用结果(消息.返回值)时的状态,指在不能立刻得到结果 ...

  10. Windows Terminal安装并美化

    介绍 Windows Teminal是一款新式.快速.高效.强大的终端应用程序,适用于命令行工具.命令提示符.PowerShell.WSL(Linux子系统)等等的Shell用户,主要功能包括多选项卡 ...