标题:求助 保安值班安排系统
只看楼主
曾经暧过
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-12-22
 问题点数:0 回复次数:5 
求助 保安值班安排系统
求助  不用<conio.h> 这个头文件可不可以编下面的程序  必须要用C语言编   最好关键的地方做上注释  本人菜鸟 谢谢各位了
保安值班安排系统
某公司有7名保安人员:赵、钱、孙、李、周、吴、陈。由于工作需要进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制一程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日如下:
赵:星期二、星期四 钱:星期一、星期六
孙:星期三、星期日 李:星期五 周:星期一、星期四、星期六
吴:星期二、星期五 陈:星期三、星期六、星期日
搜索更多相关主题的帖子: 系统 值班 
2007-12-22 14:18
闪闪4521
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-11-30
得分:0 
用栈吧,跟8皇后的问题有点类似
2007-12-22 16:56
guigui0071
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-12-30
得分:0 
保安值班安排系统
某公司有7名保安人员:赵、钱、孙、李、周、吴、陈。由于工作需要进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制一程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日如下:
赵:星期二、星期四 钱:星期一、星期六
孙:星期三、星期日 李:星期五 周:星期一、星期四、星期六
吴:星期二、星期五 陈:星期三、星期六、星期日



#include<stdio.h>
char *WEEK[7] = {"  7.", "  1.", "  2.", "  3.", "  4.", "  5.", "  6."};

int IsChecked(int p[])
{
    int i, j;
    for (i=0; i<7; ++i)
{
for (j=0; j<7&&p[j]!=i; ++j); //*从0到6循环,如果数组中缺少0-6的任何一位数字,则返回0,如果0-6亿权,则返回。*//
        if (j == 7) return 0;
}
    return 1; //*这个函数的作用是确保0-6这7个数字均包含在该书组中*//
}

main()
{
    int  t=0, j, ren[7];
    long i;
    system("cls");
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("**********************************************");
    printf("\n*zhao,  qian,  sun,  li,  zhou,  wu,  chen   *\n");
    printf("*--------------------------------------------*\n");
    printf("");
    for (i=0; i<2097152; ++i)
{
for (j=0; j<7; ++j)

{
    ren[j]= (i>>(3*j))&7; //*通过这个循环,穷尽0-7在数组中所有的排列组合方式*//
}
        if (!(ren[0]==2 || ren[0]==4))continue; //*如果赵保安不是休周二或周四,就不用循环了。*//
        else if (!(ren[1]==1 || ren[1]==6))continue;//*如果钱保安不是休周一或周六,就不用循环了。*//
        else if (!(ren[2]==3 || ren[2]==0))continue;//*如果孙保安不是休周三或周日,就不用循环了。*//
        else if (!(ren[3]==5))continue; //*如果李保安不是休周五,就不用循环了。*//
        else if (!(ren[4]==1 || ren[4]==4 || ren[4]==6))continue; //*如果周保安不是休周一或周四或周六,就不用循环了。*//
        else if (!(ren[5]==2 || ren[5]==5))continue; //*如果吴保安不是休周二或周五,就不用循环了。*//
        else if (!(ren[6]==3 || ren[6]==6 || ren[6]==0))continue;//*如果陈保安不是休周三或周六或周日,就不用循环了。*//
        else if (!IsChecked(ren)) continue; //*至此,所有的保安可按他们的愿望休假,但是此时的方案可能有两个人同休一天的*//
        //*情况发生,因此用这个函数排除,如果0-6这七个数字(一周七天)任何一个包含在数组中则此次匹配失败。*//
        for (j=0; j<7; ++j){
printf(" %s ", WEEK[ren[j]]);
}printf("   *");
printf("\n");  //*输出成功匹配方案*//
        ++t;  //*记录成功匹配个数*//
    }
    printf("*--------------------------------------------*");
    printf("\n*          %d zhong qing kuang!               *", t); //*输出成功匹配方案个数*//
    printf("\n**********************************************");
    getch();
}


结果是
**********************************************
*zhao,  qian,  sun,  li,  zhou,  wu,  chen   *
*--------------------------------------------*
   4.    6.    3.    5.    1.    2.    7.    *
   4.    1.    3.    5.    6.    2.    7.    *
   4.    6.    7.    5.    1.    2.    3.    *
   4.    1.    7.    5.    6.    2.    3.    *
*--------------------------------------------*
*          4 zhong qing kuang!               *
2007-12-30 15:12
tianjun1900
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-4-2
得分:0 
如果休息日不确定
以菜单的 方式输入休息日   有 该怎么写呢
2010-04-18 10:30
中央夸,我拽
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-12-11
得分:0 
回复 2楼 闪闪4521
能否把程序解读一下
2014-12-11 19:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-193839-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.102036 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved