java实现第三届蓝桥杯排日程
排日程
【编程题】(满分34分)
某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息2天。
上级要求每个人每周的工作日和休息日安排必须是固定的,不能在周间变更。
此外,由于工作需要,还有如下要求:
所有人的连续工作日不能多于3天(注意:周日连到下周一也是连续)。
一周中,至少有3天所有人都是上班的。
任何一天,必须保证 A B C D 中至少有2人上班。
B D E 在周日那天必须休息。
A E 周三必须上班。
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
【注意】
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
请不要使用package语句。
源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
import java.util.ArrayList;
public class Main {
public static int[] S = {0, 1};
public static ArrayList<String> list = new ArrayList<String>();
public static ArrayList<String> result = new ArrayList<String>();
public boolean check(int[] A) {
int count = 0;
for(int i = 0;i < 7;i++) {
if(A[i] == 1)
count++;
if(A[i % 7] == 1 && A[(i+1) % 7] == 1 && A[(i+2) % 7] == 1
&& A[(i+3) % 7] == 1)
return false;
}
if(count == 5)
return true;
return false;
}
public void dfs(int[] A, int step) {
if(step == A.length) {
if(check(A)) {
StringBuilder s = new StringBuilder("");
for(int i = 0;i < A.length;i++)
s.append(A[i]);
if(!list.contains(s))
list.add(s.toString());
}
return;
} else {
for(int i = 0;i < 2;i++) {
A[step] = S[i];
dfs(A, step + 1);
A[step] = -1;
}
}
}
public boolean check1(String[] arrayA, int step) {
if(step >= 0) {
if(arrayA[0].charAt(2) != '1')
return false;
}
if(step >= 1) {
if(arrayA[1].charAt(6) != '0')
return false;
}
if(step >= 2) {
int count = 0;
for(int i = 0;i < arrayA[0].length();i++) {
if(arrayA[0].charAt(i) == arrayA[2].charAt(i) &&
arrayA[0].charAt(i) == '1')
count++;
}
if(count < 4)
return false;
}
if(step >= 3) {
if(arrayA[3].charAt(6) != '0')
return false;
for(int i = 0;i < arrayA[0].length();i++) {
int count = 0;
if(arrayA[0].charAt(i) == '1')
count++;
if(arrayA[1].charAt(i) == '1')
count++;
if(arrayA[2].charAt(i) == '1')
count++;
if(arrayA[3].charAt(i) == '1')
count++;
if(count < 2)
return false;
}
}
if(step >= 4) {
if(arrayA[4].charAt(6) != '0' || arrayA[4].charAt(2) != '1')
return false;
int count = 0;
for(int i = 0;i < arrayA[0].length();i++) {
if(arrayA[0].charAt(i) == '1' && arrayA[1].charAt(i)
== '1' && arrayA[2].charAt(i) == '1' &&
arrayA[3].charAt(i) == '1' && arrayA[4].charAt(i) == '1')
count++;
}
if(count < 3)
return false;
}
return true;
}
public void dfsResult(String[] arrayA, int step) {
if(step == 5) {
String s = "";
for(int i = 0;i < arrayA.length;i++) {
s = s + arrayA[i] + "\n";
}
if(!result.contains(s))
result.add(s);
return;
} else {
for(int i = 0;i < list.size();i++) {
arrayA[step] = list.get(i);
if(check1(arrayA, step)) {
dfsResult(arrayA, step + 1);
arrayA[step] = "";
} else {
continue;
}
}
}
}
public void getResult() {
int[] A = {-1,-1,-1,-1,-1,-1,-1};
dfs(A, 0);
String[] arrayA = new String[5];
dfsResult(arrayA, 0);
for(int i = 0;i < result.size();i++)
System.out.println(result.get(i));
}
public static void main(String[] args) {
Main test = new Main();
test.getResult();
}
}
java实现第三届蓝桥杯排日程的更多相关文章
- java实现第三届蓝桥杯拼音字母
拼音字母 在很多软件中,输入拼音的首写字母就可以快速定位到某个词条.比如,在铁路售票软件中,输入: "bj"就可以定位到"北京".怎样在自己的软件中实现这个功能 ...
- java实现第三届蓝桥杯方块填数
方块填数 "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6的小格被分为6个部 ...
- java实现第三届蓝桥杯DNA对比
DNA对比 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子.它由4种主要的脱氧核苷酸(dAMP.dGMP.dCMT和dTMP)通过磷酸二酯键连接而成.这4种核苷酸可以分别记为:A.G.C. ...
- java实现第三届蓝桥杯火柴游戏
火柴游戏 [编程题](满分34分) 这是一个纵横火柴棒游戏.如图[1.jpg],在3x4的格子中,游戏的双方轮流放置火柴棒.其规则是: 不能放置在已经放置火柴棒的地方(即只能在空格中放置). 火柴棒的 ...
- java实现第三届蓝桥杯源码变换
源码变换 这道题因为有一些html语言在编写的时候不会显示出来,所以就用代码格式把题目写出来 [编程题](满分22分) 超文本标记语言(即HTML),是用于描述网页文档的一种标记语言. HTML通过文 ...
- java实现第三届蓝桥杯机器人行走
机器人行走 [编程题](满分18分) 某少年宫引进了一批机器人小车.可以接受预先输入的指令,按指令行动.小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字). ...
- java实现第三届蓝桥杯地址格式转换
地址格式转换 [编程题](满分21分) Excel是最常用的办公软件.每个单元格都有唯一的地址表示.比如:第12行第4列表示为:"D12",第5行第255列表示为"IU5 ...
- java实现第三届蓝桥杯数据压缩
数据压缩 某工业监控设备不断发回采样数据.每个数据是一个整数(0到1000之间).各个数据间用空白字符(空格,TAB或回车换行)分隔.这些数据以文本形式被存储在文件中. 因为大多数时候,相邻的采样间隔 ...
- java实现第三届蓝桥杯星期几
星期几 1949年的国庆节(10月1日)是星期六. 今年(2012)的国庆节是星期一. 那么,从建国到现在,有几次国庆节正好是星期日呢? 只要答案,不限手段! 可以用windows日历,windows ...
随机推荐
- leeCode刷题 1078
给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 "first second third" 形式出现的情况,其中 second 紧随 firs ...
- 感觉shopex现在的升级方式太慢了
我是说产品的更新,484,485是一个经典的版本,那时候免费,shopex 系统市场占用率很高.但是485以后呢,只有小版本的更新,fxw ,ekd 都是改进版本吧,没用特别大幅度的更新.5年前,10 ...
- 学习Echarts:(一)静态图表
Echarts是现在比较火的js图表库,官网有丰富的实例和友好的入门教程.但是图表的种类很多,配置项的参数也很多,一开始我根据图表类型翻看配置项,发现这样学效率太低了,决定先制定一个简单的学习步骤,按 ...
- css概述四
八.文本格式化 2.文本属性 ①文本颜色 color:合法的颜色值 ②文本对齐方式 text-align: 取值 left/center/right/justify 注意 1.一个元素写了text- ...
- nginx配置之虚拟主机功能
虚拟主机功能: 一个nginx下运行多个网址(站点域名) 方式一:nginx.conf中的http{}中的每一个server{}就是一个站点(相同端口): #虚拟主机1 server { listen ...
- ABAP基础4:模块化
子程序定义 以form开始,以endform结束,用perform语句调用,from语句可以在程序内部/外部,perform一定要写在前面 perform. from. 子程序模块 endform. ...
- GreenPlum-数据存储目录迁移及常用操作
一.环境介绍 Greenplum5 3节点集群,Centos7.2虚拟机, 二.需求 因为/home目录磁盘空间已满,需要将Greenplum的数据存储目录转移到新的分区/opt目录下,虚拟机磁盘管理 ...
- 实验三 Java基本程序设计(2)
实验三 Java基本程序设计(2) ...
- Fabric进阶(二)—— 在已有组织中增加节点
fabric网络在创建时就已经确定了初始的节点数量,而在实际应用场景中可能会需要在某个组织中动态增加节点.这里以balance-transfer v1.0为例(2 Org,4 Peer),介绍如何在o ...
- PAT-1134 Vertex Cover (图的建立 + set容器)
A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...