C语言实现排班系统。具体题目:学校实验楼有7名保安人员:钱、赵、孙、李、周、吴、陈。由于工作需要
进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。
请编制程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日如下:
赵:星期二、星期四
钱:星期一、星期六
孙:星期三、星期日
李:星期五
周:星期一、星期四、星期六
吴:星期二、星期五
陈:星期三、星期六、星期日
C语言实现排班系统。
答案:2 悬赏:0 手机版
解决时间 2021-12-30 20:20
- 提问者网友:人傍凄凉立暮秋
- 2021-12-30 07:40
最佳答案
- 五星知识达人网友:琴狂剑也妄
- 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;
}
#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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯