博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯-排日程
阅读量:5989 次
发布时间:2019-06-20

本文共 2963 字,大约阅读时间需要 9 分钟。

【编程题】(满分32分)

    某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息2天。
    上级要求每个人每周的工作日和休息日安排必须是固定的,不能在周间变更。
    此外,由于工作需要,还有如下要求:
    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

java代码如下:

 

//排日程public class js_cgz_05 {	private static int[][] types;	public static void main(String[] args) {		//根据条件:		//1.必须工作5天,休息2天		//2.不能连续工作超过3天		//根据以上两个条件可以确定每个人的时间安排只可能有7种可能		//即以下这七种情况:(0表示休息,1表示上班)//		0 1 1 1 0 1 1 //		1 0 1 1 1 0 1 //		1 1 0 1 1 1 0 //		0 1 1 0 1 1 1 //		1 0 1 1 0 1 1 //		1 1 0 1 1 0 1 //		1 1 1 0 1 1 0		types=new int[7][7]; 		int j=0;		//初始化types数组,i表示第一个0出现的下标,j表示第二个0出现的下标		for(int i=0;i<7;i++){			j=(i+4)%7;			for(int t=0;t<7;t++){				if(t==i||t==j){					types[i][t]=0;				}else{					types[i][t]=1;				}			}		}		//types初始化结束				//测试所有情况,每个人都可以从7种可能的工作情况中选一种,所以一共有5^7种可能		for(int a=0;a<7;a++){//a=i表示A采用第i种工作情况			// A周三必须上班			if(types[a][2]==0)continue;			for(int b=0;b<7;b++){				// B在周日那天必须休息				if(types[b][6]==1)continue;				for(int c=0;c<7;c++){					// A C 一周中必须至少有4天能见面(即同时上班)					if(!validateAC(a, c))continue;					for(int d=0;d<7;d++){						//D在周日那天必须休息						if(types[d][6]==1)continue;					    //任何一天,必须保证ABCD中至少有2人上班						if(!validateABCD(a, b, c, d))continue;						for(int e=0;e<7;e++){							//E 周三必须上班,周日那天必须休息							if(types[e][2]==0||types[e][6]==1)continue;							// 一周中,至少有3天所有人都是上班的							if(!validateAll(a, b, c, d, e))continue;							print(a, b, c, d, e);						}					}				}			}		}	}	//判断ABCD每天是否至少有2人上班,是返回true,否返回false	public static boolean validateABCD(int a,int b,int c,int d){		for(int i=0;i<7;i++){			if(types[a][i]+types[b][i]+types[c][i]+types[d][i]<2)return false;		}		return true;	}	//判断一周中是否至少有3天所有人都是上班的	public static boolean validateAll(int a,int b,int c,int d,int e){		int days=0;		for(int i=0;i<7;i++){			if(types[a][i]+types[b][i]+types[c][i]+types[d][i]+types[e][i]==5)days++;		}		return days>=3;	}	//判断一周中是否A,C至少有4天能见面	public static boolean validateAC(int a,int c){		int days=0;		for(int i=0;i<7;i++){			if(types[a][i]+types[c][i]==2)days++;		}		return days>=4;	}	//打印结果	public static void print(int a,int b,int c,int d,int e){		for(int i=0;i<7;i++)System.out.print(types[a][i]);		System.out.println();		for(int i=0;i<7;i++)System.out.print(types[b][i]);		System.out.println();		for(int i=0;i<7;i++)System.out.print(types[c][i]);		System.out.println();		for(int i=0;i<7;i++)System.out.print(types[d][i]);		System.out.println();		for(int i=0;i<7;i++)System.out.print(types[e][i]);		System.out.println();				System.out.println();	}}

输出:

 

 

01110111110110011101111101101110110101110111101101011101111011011101100110111110111001101111101110111011010110111110110101101111101101110110

 

转载地址:http://qknlx.baihongyu.com/

你可能感兴趣的文章
Nginx流量拷贝模块—ngx_http_mirror_module分析
查看>>
我的友情链接
查看>>
.net面试题集锦(1
查看>>
Xcode4.2中的strong的解释
查看>>
MongoDB 的 GridFS 详细分析
查看>>
pfsense 2.3企业应用-WEB管理向导
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Xshell基础优化
查看>>
Apache与Nginx的优缺点比较
查看>>
haproxy+keepalived(主从模式)实现高可用环境的简单配置
查看>>
基于802.1x协议的接入认证简单实现
查看>>
file-max与ulimit的关系与差别
查看>>
IBM小型机远程管理,HMC连接到P5
查看>>
如何有效使用Project(2)——进度计划的执行与监控
查看>>
配置Spring发送邮件
查看>>
我的友情链接
查看>>
LANMP安装
查看>>
职业发展
查看>>
手机视频开发包
查看>>