问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-09-25 01:03

我来回答

1个回答

热心网友 时间:2023-09-14 23:37

#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=0;i<n;i++)
{
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=0;i<NUM;i++)
{
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=0;i<n;i++)
{
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=0;i<n;i++)
{
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=0;k<n;k++)
{
l=OBJECT_INIT;
for(i=0;i<n;i++)
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:\>
写了我将近一个小时,程序没有问题,需要修改或者有什么问题可以留言。

热心网友 时间:2023-09-14 23:37

#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=0;i<n;i++)
{
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=0;i<NUM;i++)
{
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=0;i<n;i++)
{
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=0;i<n;i++)
{
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=0;k<n;k++)
{
l=OBJECT_INIT;
for(i=0;i<n;i++)
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:\>
写了我将近一个小时,程序没有问题,需要修改或者有什么问题可以留言。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...女孩 姓陆 2011年11月26号03点24分 出生 五行缺水火 望高人帮忙起名... 女孩,姓陆,2010.农历05.19下午13.25分出生。五行不缺。请各位大虾取个... 2013年女孩3月9号11点43姓陆女孩取什么名字 2012年11月11日上午5点左右出生的女孩五行缺什么,姓陆,取什么名好 女孩2013年4月4日清明节晚上二十三点半左右出生想知道五行缺?啥取什... 公对公汇款需要什么资料 在微信附近的人里面我点击了清除位置并退出的按钮这样别人在附近的人... 13点128保留整数是多少 128乘以72怎么估算 按要求把下面各数省略万位(或亿位)后面的尾数,求出近似数.1284639... 我的电脑怎么下载穿越火线那么慢 穿越火线为什么下载速度慢? 为什么cf下载的这么慢,在线等 用温暖的不同意思各说一句话 表示气候 野生羊角蜜是什么 请问一下龙族圣核怎么获得 请问龙族圣核怎么获得 想问龙族圣核怎么获得 甜瓜有转基因吗? 红玲吸蜜鹦鹉吃什么急急 急 急需要知道 美团外卖优质好评回复简短文字集合四十条 白带像豆腐渣怎么回事用什么药清洗 蚕丝的产地在哪? 我经常粘假睫毛和双眼皮贴,去年贴了一年没什么事,今年一贴就过敏了,眼睛红肿有时候还流脓水,怎么回事 贴双眼皮贴 眼角硌出红疙瘩怎么消除。涂什么药 获得市2级运动员对自己有什么好处? 当一名著名运动员的好处是什么? 乌龟吃活食还是吃死食 罗汉鱼是吃饲料好还是吃活食好 经常给乌龟喂活食导致它不吃龟粮了怎么办,有什么解决办法吗? 和田玉有白绿料吗 我有一块玉绿白色是什么玉 丹东玉象牙白和白绿料那种多好 长沙地铁几点开始运营 室外安的移动wlan盒子叫什么名字? 三洋空调开关机滴响就是不开机口是什么病,谢谢 吃螃蟹的禁忌是什么,食用螃蟹的禁忌 质子重离子技术是什么?对什么病治疗比较好? 肺癌复发了可以用质子治疗吗? 请问一下三星堆遗址的游玩季节 想问三星堆遗址的游玩季节 形容笑起来温暖的句子 hibernate中load和get方法更别区别 怎么调用Form的load的方法却不使窗体显示出来 鹤岗房子为什么不能买 鹤岗买房子值得吗 骂人最狠的歇后语 雕章镂句成语的意思 带有句字的有哪些成语 九江人为什么叫九剥皮?