C语言自动排班系统

linxuan7323 2010-05-31 01:37:00
学校实验楼有7名保安人员:钱、赵、孙、李、周、吴、陈。由于工作需要进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制程序,打印轮休的所有可能方案。当然使每个人都满意。

以下代码没有输入功能,需要有输入数据,然后输出所有可能方案,这不符合题目要求,
谁能给我实现输入数据的代码?
#include<stdio.h>
char *WEEK[7] = {"日", "一", "二", "三", "四", "五", "六"};

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 j, ren[7],rest[7],s=0;
long i,k;
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这七个数字(一周七天)任何一个包含在数组中则此次匹配失败。*//
++s;
printf("solution: %d\n",s);
printf("赵 钱 孙 李 周 吴 陈\n");
printf("==================================================================\n");
for (j=0; j<7; ++j){
printf("星期%s\t", WEEK[ren[j]]);
}
printf("\n");
}

}
...全文
514 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhei007 2010-05-31
  • 打赏
  • 举报
回复
垃圾题目,按照题目,还需要排什么班啊,让他们自己选休息,其他的上班就是了。都没有前提条件。。。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧