7-2 值班安排 (20 分)

医院有A、B、C、D、E、F、G 7位大夫,在一星期内(星期一至星期天)每人要轮流值班一天,如果已知: (1)A大夫比C大夫晚1天值班; (2)D大夫比E大夫晚1天值班; (3)E大夫比B大夫早2天值班 (4)B大夫比G大夫早4天值班; (5)F大夫比B大夫晚1天值班; (6)F大夫比C大夫早1天值班; (7)F大夫星期四值班。 就可以确定周一至周日的值班人员分别为:E、D、B、F、C、A、G。 编写程序,根据输入的条件,输出星期一至星期天的值班人员。

输入格式:
先输入一个整数n,再输入n组条件,要求能够根据输入的条件确定唯一的值班表,且输入的n组条件中能够直接或间接得到任意两位大夫的关联关系,例如上面的条件(2)直接显示了D与E间的关系,而通过条件(1)、(6)、(5)可以间接得到A与B的关系。 条件的输入格式有2种: 格式1:编号 比较运算符 编号 天数 其中比较运算符有2种:> 或 < ,分别表示“早”或“晚” 例如:A<C1 表示:A大夫比C大夫晚1天值班 格式2:编号 = 数值 例如:F=4 表示:F大夫在星期四值班

输出格式:
输出周一至周日的值班序列。

输入样例:
7
A<C1
DB2
B>G4
FC1
F=4
输出样例:
EDBFCAG

#include<bits/stdc++.h>
using namespace std;
struct node{
	char a;
	char c;
	char fu;
	int t;
	int f;
};
node zhi[100];
char pai[8];
vector<char>v;
int main(){
	int n;
	cin>>n;
	int t=0;
	int t1=0;getchar();
	for(int i=0;i<n;i++){
		char a,b,c;
		int d;
		
		string s;
		getline(cin,s);
		a=s[0];
		b=s[1];
	//	cout<<s<<endl;
		if(b=='='){
			d=s[2]-'0';
			pai[d-1]=a;
			
			t1++;continue;
			//v.push_back(a);
		}
		c=s[2];
		d=s[3]-'0';
		if(b=='>'){
		
		zhi[t].a=a;
		zhi[t].fu=b;
		zhi[t].c=c;
		zhi[t].t=d;
		zhi[t++].f=0;}
		else {
				zhi[t].a=c;
		zhi[t].fu='>';
		zhi[t].c=a;
		zhi[t].t=d;
		zhi[t++].f=0;
		}
	//	cout<<a<<b<<c<<d<<endl;
	}
	
int k=t;
	while(k--){
	
	for(int i=0;i<t;i++){
		//cout<<i<<": ";
		if(zhi[i].f==0){
		
	for(int j=0;j<7;j++){
			if(pai[j]==zhi[i].a){
				//cout<<" "<<j;
				
				int c=zhi[i].t;
			
				if(c+j<7)	pai[(c+j)]=zhi[i].c;
				else pai[(c+j)%7]=zhi[i].c;
				//cout<<(c+j)%7<<endl;
				zhi[i].f=1;
				
			
			}
			 if(pai[j]==zhi[i].c){
			
				int c=zhi[i].t;
				
				
					pai[(j-c+7)%7]=zhi[i].a;
				
				zhi[i].f=1;
				
			//	cout<<(j-c+7)%7<<endl;
			
			}
			/*for(int i=0;i<7;i++){
		cout<<pai[i]<<" ";
	}cout<<endl;*/ 
		}
	}
		}
}
	for(int i=0;i<7;i++){
		cout<<pai[i];
	}
	}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值