只知道g的位置和a到f的相对位置那么a到f只能在星期一到星期六的位置因此得出星期一到星期日的值班安排。我还是有一些想到的bug但还是没想到解决办法这也是这程序的不完美之处如:A>CC>DD>GG=E>F这时的答案应为:ABCDEFG收获:在编程时但我的到我要的预期效果我会感到很高兴。#includechars,a用来存放值班顺序及题目该给的条件intnvoidfunc(charnode,intka)实现用已知医生及位置确定与其相关的医生的位置{charnode,ka,kbintjfor(j=j<=nj){if(aj!='')判断是否已确定位置的条件{if(aj==node||aj==node)判断是否与已知的医生有关的条件{aj=''把该条件标记为'',避免再次使用确定该条件中还未确定位置的另一位医生的位置if(aj!=node){if(aj=='<')kb=aj''elsekb=(aj'')skakb=ajnode=ajka=kakbfunc(node,ka)把该医生作为已知位置的医生来确定其他与这医生有关的医生}else{if(aj=='<')kb=(aj'')elsekb=(aj'')skakb=ajnode=ajka=kakbfunc(node,ka)把该医生作为已知位置的医生来确定其他与这医生有关的医生}}}}}intmain(){inti,ka,aa,ab,flag=charnodewhile(scanf("d",n)!=EOF){getchar()for(i=i<=i)初始化用来存放顺序的数组为''si=''for(i=i<=ni)存放测试数据的条件及标记这些条件{ai=''scanf("s",ai)}for(i=i<=ni)寻找条件中有等于号的确定该位医生的值班时间并通过该位医生确定其他与这位医生有关医生的值班时间{if(ai=='='){ka=ai''ska=ainode=aiai=''把已确定时间的条件标记为'',避免再次确定位置(避免重复搜索该条件)func(node,ka)调用函数确定与该医生有关系的医生的值班时间}}for(i=i<=ni)考虑有些条件没有等于号且还未确定值班时间的医生通过假设该医生的位置同时确定与该医生有关的医生值班时间{if(ai=='')判断是否被标记过{node=ais=node假设该医生的时间是在ka=记录该医生的位置func(node,ka)同过函数确定与该医生有关的医生与该医生的相对位置}}flag=flag标记为for(i=i<=i)判断星期一到星期五是否都有医生值班if(si==''){aa=iflag=如果哪一天没人值班记下那一天的时间并把flag标记为break}if(flag==)通过假设的位置填充到数组的相应位置{for(i=i<=i)if(si!=''){ab=ibreak}for(i=aai<=i){if(si=='')si=sabaai}}for(i=i<=i)输出医生值班的顺序表printf("c",si)putchar()换行}return}