日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯-排日程

發(fā)布時間:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯-排日程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【編程題】(滿分32分)


? ? 某保密單位機(jī)要人員 A,B,C,D,E 每周需要工作5天,休息2天。

? ? 上級要求每個人每周的工作日和休息日安排必須是固定的,不能在周間變更。

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

? ? 1. 所有人的連續(xù)工作日不能多于3天(注意:周日連到下周一也是連續(xù))。

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

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

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

? ? 5. A E 周三必須上班。

? ? 6. A C 一周中必須至少有4天能見面(即同時上班)。

? ? 你的任務(wù)是:編寫程序,列出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) {//根據(jù)條件://1.必須工作5天,休息2天//2.不能連續(xù)工作超過3天//根據(jù)以上兩個條件可以確定每個人的時間安排只可能有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 0types=new int[7][7]; int j=0;//初始化types數(shù)組,i表示第一個0出現(xiàn)的下標(biāo),j表示第二個0出現(xiàn)的下標(biāo)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初始化結(jié)束//測試所有情況,每個人都可以從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,否返回falsepublic 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;}//打印結(jié)果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();} }


輸出:

?

?

0111011 1110110 0111011 1110110 11101101011101 1110110 1011101 1110110 11101100110111 1101110 0110111 1101110 11101101011011 1110110 1011011 1110110 1110110

?


總結(jié)

以上是生活随笔為你收集整理的蓝桥杯-排日程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。