用c语言程序编写“ABCDEFG七位医生排班”,怎么写?

用c语言程序编写“ABCDEFG七位医生排班”,怎么写?,第1张

#include <stdio.h>

#define NUM 26

#define DOCTOR_INIT -100

#define OBJECT_INIT -100

#define OFFSET_INIT -100

typedef struct Statement /*用来存储每一个语句object1存储第一个字母,2存储第二个,offset存储最后的数字*/

{

int object1

int object2

int offset

}

void manage(struct Statement* statement,int* doctor,int n,int equal)

/*递归函数,处理刚才的输入*/

/*前三个参数是传递当前情况,第四个参数表示刚刚确定的那个doctor[],整次递归只处理刚刚确定的那一个*/

{

int i

for(i=0i<ni++)

{

if(statement[i].object1==equal &&doctor[statement[i].object2]==DOCTOR_INIT &&statement[i].offset!=OFFSET_INIT)

{

doctor[statement[i].object2] = doctor[equal]+statement[i].offset

manage(statement,doctor,n,statement[i].object2)

}

if(statement[i].object2==equal &&doctor[statement[i].object1]==DOCTOR_INIT &&statement[i].offset!=OFFSET_INIT)

{

doctor[statement[i].object1] = doctor[equal]-statement[i].offset

manage(statement,doctor,n,statement[i].object1)

}

}

}

void main()

{

/*变量声明*/

int n

struct Statement statement[NUM]

int doctor[NUM]

int i,k,l

char c[5]

char oper

/*变量初始化*/

for(i=0i<NUMi++)

{

statement[i].object1=OBJECT_INIT

statement[i].object2=OBJECT_INIT

statement[i].offset=OFFSET_INIT

doctor[i]=DOCTOR_INIT

}

/*读入语句*/

printf("请输入n:")

scanf("%d",&n)

for(i=0i<ni++)

{

printf("%d:",i+1)

scanf("%s",c)

statement[i].object1=c[0]-'A'

oper=c[1]

if(oper != '=')

{

statement[i].object2=c[2]-'A'

statement[i].offset=c[3]-'0'

}

else

statement[i].offset=c[2]-'0'

if(oper == '<')

statement[i].offset*=-1

}

/*递归处理语句*/

for(i=0i<ni++)

{

if(statement[i].object2==OBJECT_INIT &&doctor[statement[i].object1]==DOCTOR_INIT)

{

doctor[statement[i].object1]=statement[i].offset

manage(statement,doctor,n,statement[i].object1)

}

}

/*输出*/

for(k=0k<nk++)

{

l=OBJECT_INIT

for(i=0i<ni++)

if(doctor[i]!=DOCTOR_INIT)

if(l==OBJECT_INIT || doctor[l]>doctor[i])

l=i

if(l==OBJECT_INIT)

break

printf("%c ",l+'A')

doctor[l]=DOCTOR_INIT

}

}

编译运行效果:

E:\>gcc 11.c

11.c:12: warning: useless storage class specifier in empty declaration

E:\>a.exe

请输入n:7

1:A<C1

2:D<E1

3:E>B2

4:B>G4

5:F<B1

6:F>C1

7:F=4

E D B F C A G

E:\>

写了我将近一个小时,程序没有问题,需要修改或者有什么问题可以留言。

给你个c++版本做参考:

#include <iostream>

#include <algorithm>

#include <string>

#include <vector>

int main(int argc,char *argv[])

{

std::vector<int>arr[7]

std::vector<std::vector<int>>resolution

for(int i=0i!=7++i)

{

int temp

std::cout<<"please input number "<<i+1

<<" person's all rest days he wanted(1-7):\n"

while(std::cin.peek()!='\n')

{

std::cin>>temp

arr[i].push_back(temp)

}

::getchar()

}

int arr1[]={1,2,3,4,5,6,7}

do

{

for(int i=0i!=7++i)

{

std::vector<int>::iterator iter=

std::find(arr[i].begin(),arr[i].end(),arr1[i])

if(iter==arr[i].end())

{

break

}

if(i==6)

{

std::vector<int>temp(arr1,arr1+7)

resolution.push_back(temp)

}

}

}while(std::next_permutation(arr1,arr1+7))

size_t cnt=resolution.size()

std::cout<<"可用的方案如下,按职员A-G的休息日排列:\n"

for(int i=0i!=cnt++i)

{

size_t temp=resolution[i].size()

std::cout<<"方案 "<<i+1<<":\n"

for(int j=0j!=temp++j)

std::cout<<resolution[i][j]<<" "

std::cout<<"\n"

}

::system("pause")

return 0

}

题目5:排班系统

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

钱:星期一、星期六赵:星期二、星期四孙:星期三、星期日李:星期五

周:星期一、星期四、星期六吴:星期二、星期五

陈:星期三、星期六、星期日

运行结果:

功能要求:

1、排班情况需要保存到文件

2、能读取到已经完成的本周排班情况,并进行修改或删除,修改完毕,需要保存至文件。

3、文件中要保存最近四周的排班信息,前三周的只能查看,本周的排班情况可以修改。

4、输入保安人员的名字,查询最近四周工作哪些天,休息那几天。

链接: https://pan.baidu.com/s/1LxVgi4xUnR4NuZo_KeGeoA

提取码:1111


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7962721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存