C语言 蓝桥杯决赛排日程

来源:互联网 发布:级域名泛解析多久生效 编辑:程序博客网 时间:2024/04/27 09:08

   某保密单位机要人员 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



#include <stdio.h>//每人工作安排只有七种情况void Assignment(int *a, int i){switch (i){case 1:a[0] = 0; a[1] = 1; a[2] = 1; a[3] = 0; a[4] = 1; a[5] = 1; a[6] = 1;break;case 2:a[0] = 0; a[1] = 1; a[2] = 1; a[3] = 1; a[4] = 0; a[5] = 1; a[6] = 1;break;case 3:a[0] = 1; a[1] = 1; a[2] = 0; a[3] = 1; a[4] = 1; a[5] = 1; a[6] = 0;break;case 4:a[0] = 1; a[1] = 1; a[2] = 1; a[3] = 0; a[4] = 1; a[5] = 1; a[6] = 0;break;case 5:a[0] = 1; a[1] = 0; a[2] = 1; a[3] = 1; a[4] = 1; a[5] = 0; a[6] = 1;break;case 6:a[0] = 1; a[1] = 0; a[2] = 1; a[3] = 1; a[4] = 0; a[5] = 1; a[6] = 1;break;case 7:a[0] = 1; a[1] = 1; a[2] = 0; a[3] = 1; a[4] = 1; a[5] = 0; a[6] = 1;break;}}int main(){int a[5][7], i, j, k, l, m, x, y, n, q;for (i = 1; i <= 7; i++){Assignment(a[0], i);for (j = 1; j <= 7; j++){Assignment(a[1], j);for (k = 1; k <= 7; k++){Assignment(a[2], k);for (l = 1; l <= 7; l++){Assignment(a[3], l);for (m = 1; m <= 7; m++){Assignment(a[4], m);x = 0;  y = 0;//A,E周三必须上班;B,D,E周日必须休息if (a[0][2] == 1 && a[4][2] == 1 && a[1][6] == 0 && a[3][6] == 0 && a[4][6] ==0)for (n = 0; n < 7; n++){//任何一天,必须保证ABCD中至少两人上班if (a[0][n] + a[1][n] + a[2][n] + a[3][n] < 2)break;//一周中,至少有3天所有人都是上班的if (a[0][n] == 1 && a[1][n] == 1 && a[2][n] == 1 && a[3][n] == 1 && a[4][n] == 1)x++;//A C一周中必须至少有四天能见面(同时上班)if (a[0][n] == 1 && a[2][n] == 1)y++;}if (x >= 3 && y >= 4){for (q = 0; q < 5; q++){for (n = 0; n < 7; n++)printf("%d", a[q][n]);putchar('\n');}putchar('\n');}}}}}}return 0;}


原创粉丝点击