题目描述
输入
输入数据保证每个人只有一个父亲。
输出
样例输入
5
1 3
2 4
3 5
4 6
5 6
6
1 3
2 4
3 5
4 6
5 7
6 7
样例输出
You are my elder
You are my brother
题意概括:
现在有两个人,zzq和cj,给你n行数据,每行输入两个整数a和b,表示a的父亲是b。zzq的编号为1,cj的编号为2。根据这些数据推出zzq和cj的辈分关系。
解题数量:
从a=1和a=2处开始找出所给数据中所有关于二者的人物,辈分从小到大排列,存入两个数组中,比较这两个数组,找出数组中第一个相同的人物,代表二人共同的祖先,然后看祖先在那个人代表的数组里排的靠前,那个人的辈分就大。
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
inta[1000],b[1000],c[1000],d[1000],i,j,k,k1,k2,e,l1,l2,m,n,t1,t,f1,f2;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
}
k2=0;
for(i=0;i<n;i++)
{
if(a[i]==1&&b[i]==2)
{
printf("Youare my elder\n");
k2=1;
}
if(a[i]==2&&b[i]==1)
{
printf("Youare my younger\n");
k2=1;
}
}
if(k2==0)
{
for(i=0;i<n;i++)
{
//printf("%d%d\n",a[i],b[i]);
}
l1=1;l2=2;k=0;e=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)//printf("a[i]==%d %d\n",a[i],l1);
{
if(a[j]==l1)//关于1的人物存入数组c中
{
l1=b[j];
c[k]=a[j];
k++;
c[k]=b[j];
k++;
}
//printf("a[i]==%d %d\n",a[i],l2);
if(a[j]==l2)//关于2的人物存入数组d中
{
l2=b[j];
d[e]=a[j];
e++;
d[e]=b[j];
e++;
}
}
}
for(i=0;i<k;i++)
{
// printf("%d ",c[i]);
}
//printf("\n\n");
for(i=0;i<e;i++)
{
// printf("%d ",d[i]);
}
//printf("\n\n");
k1=0;
f1=0;
f2=0;
for(i=0;i<k;i++)//找出共同的祖先和他所在的位置
{
for(j=0;j<e;j++)
{
if(c[i]==d[j])
{
f1=i;
f2=j;
k1=1;
break;
}
}
if(k1==1)
break;
}
//printf("f1f2%d%d\n",f1,f2);
if(f1>f2)
{
printf("Youare my elder\n");
}
if(f1==f2)
{
printf("Youare my brother\n");
}
if(f1<f2)
{
printf("Youare my younger\n");
}
}
}
return0;
}