题目通道
题目描述
人生不相见,动如参与商。
今夕复何夕,共此灯烛光。 --杜甫《赠卫八处士》
临近毕业,马上要与室友分别,小H情不自禁背起诗来。突然,小H灵光一闪:不如每年大伙都聚一次。可是小H又犯了难,他知道大家毕业后肯定很忙,难找到共同的空闲时间。于是他让室友列出了各自的空闲时间。因为毕业后他们只有假期才可能有空闲,所以所有空闲时间就是空闲节日。你可以从这些假期中找到他们共同的空闲时间么?如果存在共同的空闲时间,请输出这个节日的名字;否则,请输出"What a shame!"。因为小H和室友未来都很忙,所以他们不会有两个及两个以上的共同空闲节日
注意:小H和室友可能聚会的法定节假日只有New Year(元旦节)、International Labor Day(劳动节)、The Dragon Boat Festival(端午节)、National Day(国庆节)。为了减少读入字符串的困扰,节日对应的缩写为NY、ILD、TDBF、ND
输入
输入包含6行,每行代表一个人的空闲节日,包含一个数字n(代表空闲节日数量),和n个节日缩写(表示对应的缩写)。
输入保证他们共同的空闲节日不超过一个。
输出
如果存在共同的空闲时间,输出这个节日的全称;否则,输出"What a shame!"。注意,输出占一行。
样例输入 Copy
1 NY
2 NY TDBF
1 NY
2 NY ND
1 NY
2 NY ILD
样例输出 Copy
New Year
#include<iostream>
#include<cstring>
using namespace std;
struct student
{
int n;
char a[4][5];
}st[6];
int main()
{
for(int i=0;i<6;i++)
{
cin>>st[i].n;
cin.ignore();
for(int j=0;j<st[i].n;j++)
cin>>st[i].a[j];
}
//四个节日NY、ILD、TDBF、ND
char fes[4][5]={"NY","ILD","TDBF","ND"};
//f数组记录4个节日 六个室友是否有空的情况
int f[4][6]={0};
//遍历每个节日
for(int i=0;i<4;i++)
{
//遍历每个室友
for(int s=0;s<6;s++)
{
//遍历每个室友的空闲节日
for(int k=0;k<st[s].n;k++)
{
if(strcmp(fes[i],st[s].a[k])==0)
{
f[i][s]=1;
break;
}
}
}
}
/*
打印6位学生4个节假日是否有空的情况
for(int i=0;i<4;i++)
{
for(int j=0;j<6;j++)
cout<<f[i][j]<<" ";
cout<<endl;
}
*/
int cnt=0;
for(int i=0;i<4;i++)
{
int flag=0;
for(int j=0;j<6;j++)
{
//六个同学只要有一个没空,跳出循环
if(f[i][j]==0)
{
flag=1;
break;
}
}
//cnt记录几个节日大家都没空
if(flag)
cnt++;
else
{
if(i==0)
{
cout<<"New Year"<<endl;
break;
}
else if(i==1)
{
cout<<"International Labor Day"<<endl;
break;
}
else if(i==2)
{
cout<<"The Dragon Boat Festival"<<endl;
break;
}
else if(i==3)
{
cout<<"National Day"<<endl;
break;
}
}
}
if(cnt==4)
cout<<"What a shame!"<<endl;
return 0;
}