某保密單位機要人員 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 將傳入的兩個...