窮舉 排日期

2021-07-10 07:45:08 字數 2508 閱讀 4485

某保密單位機要人員 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行記錄,從星期一開始。

【輸入、輸出格式要求】

程式沒有輸入,要求輸出所有可能的方案。

每個方案是5*7的矩陣。只有1和0組成。

矩陣中的列表示星期幾,從星期一開始。

矩陣的行分別表示a,b,c,d,e的作息時間表。

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

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

0110111

1101110

0110111

1101110

1110110

public

class

main ,,,

,};

//每週需要工作5天,休息2天。

public

static

boolean

fun0()

if(cnt!=5) return

false;

}return

true;

}//1. 所有人的連續工作日不能多於3天(注意:週日連到下周一也是連續)。

public

static

boolean

islonger(int i)

}if(cnt==4) return

true;

}return

false;

}public

static

boolean

fun1()

return

true;

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

public

static

boolean

isfull(int j)

return

true;

}public

static

boolean

fun2()

if(cnt>=3) return

true;

return

false;

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

public

static

boolean

isabcd(int j)

if(cnt>=2) return

true;

return

false;

}public

static

boolean

fun3()

return

true;

}//4. b d e 在週日那天必須休息。

public

static

boolean

fun4()

// 5. a e 週三必須上班。

public

static

boolean

fun5()

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

public

static

boolean

fun6()

if(cnt>=4) return

true;

return

false;

}public

static

void

show()

system.out.println();

}public

static

void

main(string args)

}}

首先,拿到這道題時應先根據題意列出初始a,b , c , d , e 狀態,然後再根據條件:所有人的連續工作日不能多於3天(注意:週日連到下周一也是連續)以及工作5天,休息兩天,即可得e的工作表情況:1110110。

然後,需要對除e以為表中的每個單元進行窮舉,以人為第一單位,以日期為第二單位(窮舉時往往會由於,for迴圈語句過多而混亂,這樣便於表達思路)。

最後,就是對題目中的條件的表達,從**中可以看到,並不是把每個條件的所有實現都寫在了一起,而是複雜的又進行了割裂,這樣雖然多寫了幾行**,但是乙個乙個模組的實現、組合,讓思路更加的清晰,保證了程式的可讀性,以及後續**的穩定編寫!

藍橋杯 排日期

某保密單位機要人員 a,b,c,d,e 每週需要工作5天,休息2天。上級要求每個人每週的工作日和休息日安排必須是固定的,不能在週間變更。此外,由於工作需要,還有如下要求 1.所有人的連續工作日不能多於3天 注意 週日連到下周一也是連續 2.一周中,至少有3天所有人都是上班的。3.任何一天,必須保證 ...

暴力窮舉 poj Blue Jeans

直接用暴力法窮舉所有情況 include include include using namespace std string str 11 int main int t cin t while t int n cin n for int j 0 j str j string result for ...

常見演算法 窮舉

遇到乙個問題,找不到更好的解決辦法 找不到數學公式或者規律 時,使用 最笨 的辦法,利用計算機計算速度塊的特點,將所有的可能性全部列出來,並將我們想要得到的結果記錄下來。例如 百錢買百雞 我國古代數學家張丘建在 算經 一書中提出的數學問題 雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁...