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 ...
随机推荐
- SSL协议握手工作流程详解(双向HTTPS流程)
参考学习文档:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段: 1)客户端向服务器发 ...
- Python基础语法day_04——操作列表
day_04 遍历整个列表 我们创建列表时,需要输出整个列表,但是通常列表会很长,包含很多元素,当列表长度发生变化是,都必须修改代码.通过for循环,我们可以很轻易地输出整个列表. #遍历整个列表 创 ...
- 如何搭建一个WEB服务器项目(四)—— 实现安卓端图片加载
使用Glide安卓图片加载库 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验.先谢谢 ...
- 「雕爷学编程」Arduino动手做(40)——旋转编码器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- 干货分享:如何使用Kubernetes的Ingress API
您可以通过使用诸如Kong for Kubernetes的Ingress控制器(使用自定义资源定义并提供许多插件)来极大地扩展Ingress资源的功能. Kubernetes正在整个技术行业中得到采用 ...
- Apache 慢连接dos
http://neue.v2ex.com/t/108717------不实用 http://www.blogjava.net/bukebushuo/articles/293776.html http: ...
- form提交(图片,excel其他文件)
HTML表单需要设置enctype="multipart/form-data"这个属性,如果不这么设置,在提交表单时候,相关文件将无法获取. HTML表单如何打包数据文件是由enc ...
- 手机端页面访问PC页面自动跳手机端代码
<script> var mobileAgent = new Array("iphone", "ipod", "ipad", & ...
- APP元素定位和操作
webdriver 提供了八种元素定位方法: 在 Python 语言中对应的定位方法如下:find_element_by_id()find_element_by_name()find_element_ ...
- elementUI中el-input输入数字且保留指定小数位
<input type="text" placeholder="请输入保留一位小数的数字" class="user-input user-nam ...