藍橋杯 排日期

2021-08-17 01:37:53 字數 1807 閱讀 4398

某保密單位機要人員 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的作息時間表。

多個矩陣間用空行分隔開。

例如,如下的矩陣就是乙個合格的解。請程式設計輸出所有解(多個解的前後順序不重要)。

思路:這個題目我選了乙個較為簡單的做法,首相所有出現符合的工作日求出,然後進行排列組合,用條件一一排除即可。

【注意】

請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!

在評卷時使用的輸入資料與試卷中給出的例項資料可能是不同的。

a[i][j]表示第i個人在星期j是否工作,1為工作,0為休息。

一道真的很麻煩的題目,需要認真跟著條件寫**。第三個條件任何一天,必須保證 a b c d 中至少有2人上班。

應該寫成

int f3()// 任何一天,必須保證 a b c d 中至少有2人上班。

return 1;

}

後面的寫法是錯誤的,這裡沒注意,困擾了挺久。這種實際上為存在任何一天,滿足條件。

應注意邏輯關係。

int f3()// 任何一天,必須保證 a b c d 中至少有2人上班。

return 0;

}

完整**:

#include using namespace std;

int a[8][8];

int f1()//所有人的連續工作日不能多於3天

}}int f2()//一周中,至少有3天所有人都是上班的。

if(cnt==5)

sum++;

}if(sum>=3)

return 1;

else

return 0;

}int f3()// 任何一天,必須保證 a b c d 中至少有2人上班。

return 1;

}int f4()// b d e 在週日那天必須休息。

int f5()//a e 週三必須上班。

int f6()//a c 一周中必須至少有4天能見面(即同時上班)。

if(cnt>=4)

return 1;

return 0;

}void dfs(int now)

printf("\n");

} return;

} for(int i=1;i<=7;i++)//窮舉休息日

藍橋杯 日期計算

演算法提高 日期計算 時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知2011年11月11日是星期五,問yyyy年mm月dd日是星期幾?注意考慮閏年的情況。尤其是逢百年不閏,逢400年閏的情況。輸入格式 輸入只有一行 yyyy mm dd 輸出格式 輸出只有一行 w 資料規模和約定 1...

藍橋杯 日期問題

問題描述 小明正在整理一批歷史文獻。這些歷史文獻中出現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有採用年 月 日的,有採用月 日 年的,還有採用日 月 年的。更加麻煩的是,年份也都省略了前兩位,使得文獻上的乙個日期,存在...

藍橋杯 回文日期

樣例輸入 20000101 20991231 樣例輸出 12 include using namespace std 函式宣告 bool isback int d 用於判斷傳入的引數是否是回文數 bool isleapyear int y 判斷閏年 intcal int a,int b 將傳入的兩個...