永发信息网

C语言实现排班系统。

答案:2  悬赏:0  手机版
解决时间 2021-12-30 20:20
  • 提问者网友:人傍凄凉立暮秋
  • 2021-12-30 07:40
C语言实现排班系统。具体题目:学校实验楼有7名保安人员:钱、赵、孙、李、周、吴、陈。由于工作需要
进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。
请编制程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日如下:
赵:星期二、星期四
钱:星期一、星期六
孙:星期三、星期日
李:星期五
周:星期一、星期四、星期六
吴:星期二、星期五
陈:星期三、星期六、星期日
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-12-30 08:11
#include 
#include 
#include 

struct Person
{
  int cnDay;
  int day[7]; //开的足够大,假设某个人可能7天都忙- -.
  char pName[10];
};

char name[7][10]; //7个人,每人名字不超过10
Person p[7];//7个人的信息
bool isEmpty[7]={false}; //标记7天已占用情况

void setTable(int i)
{
  if(i==7)
  {
  printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日 \n");
  for(int k=0;k<7;++k)
  {
  printf("%s ",name[k]);
  }
  printf("\n");
  return;
  }
  int k=0;
  for(;k   {
  if(isEmpty[p[i].day[k]]==false)
  {
  isEmpty[p[i].day[k]]=true;
  strcpy(name[p[i].day[k]],p[i].pName);
  setTable(i+1);
  isEmpty[p[i].day[k]]=false;
  }
  }
}

int main()
{
  int day;
  int count;
  for(int i=0;i<7;++i)
  {
  printf("输入第%d个人的名字,然后依次输入每个人的繁忙日,输入0结束此人信息录入!\n",i+1);
  count=0;
  scanf("%s",p[i].pName);
  scanf("%d",&day);
  while(day!=0)
  {
  p[i].day[count]=day-1;
  ++count;
  scanf("%d",&day);
  }
  p[i].cnDay=count;
  }
  setTable(0);
  return 0;
}
全部回答
  • 1楼网友:七十二街
  • 2021-12-30 09:49
我先说说思路:用一个7*7的二维数组pb存储一周中每天是谁休息,数组行标0-6表示人员(钱-陈),列标0-6表示星期(日-六),初始值存储为每人的休息日意愿,比如钱想休息周一、六,即置pb[0][1]和pb[0][6]为1,其余为0(表示不情愿休息),依次类推,初始化其他人员的休息意愿。接下来就对这个数组中为1的元素进行筛选修改,比如将pb[i][j]=1改为pb[i][j]=2,即表示让人员i在星期j休息,当然人员i不能又在其它天休息了,其他人员也不能在星期j这天休息了,也就是i行、j列都只能有一个为2的值,经过7次设置,即可得到一种方案。可以考虑用递归算法实现。 #include  #include  #define t 7 //排班周期 #define n 7 //人员数目 #define x 1 //每人每周期可以休息x天,x=n*x/t int total=0; void print(int pb[][t]){     int i,j;     printf("\nxiuxi fangan %d:\n",++total);     for(i=0;ix)return 0;     for(s=0,i=0;iy)return 0;     return 1; } void paiban(int pb[][t],int k){//给第k位人员安排休息日     int i,j;     for(j=0;j=0&&i=0&&j
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯