1023 - 一家人

最近小明交了一个新朋友叫小宇,他们在聊天的时候发现500年前他们竟然是一家人!现在小明想知道小宇是他的长辈,晚辈,还是兄弟。

题目输入

输入包含多组测试数据。每组首先输入一个整数N(N<=10),接下来N行,每行输入两个整数a和b,表示a的父亲是b(1<=a,b<=20)。小明的编号为1,小宇的编号为2。
输入数据保证每个人只有一个父亲。

题目输出

对于每组输入,如果小宇是小明的晚辈,则输出“You are my younger”,如果小宇是小明的长辈,则输出“You are my elder”,如果是同辈则输出“You are my brother”。

输入/输出样例

题目输入

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

C语言解答

#include<stdio.h>
int main()
{
	int ak[3000],i,a,b,n,counter1,counter2;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
		{
			scanf("%d%d",&a,&b);
			ak[a]=b;
		}
		i=1;
		counter1=counter2=0;
		while(ak[i])
		{
			i=ak[i];
			counter1++;
		}
		i=2;
		while(ak[i])
		{
			i=ak[i];
			counter2++;
		}
		if(counter1<counter2)printf("You are my younger\n");
		else if(counter2<counter1)printf("You are my elder\n");
		else printf("You are my brother\n");
	}
	return 0;
}

C++解答

#include<cstdio>
#include<map>
using namespace std;
 
int main()
{
	int n,a,b,na[5000],nb[5000];
	map<int,int> p;
	while(scanf("%d",&n)!=EOF)
	{
		p.clear();
		while(n--)
		{
			scanf("%d%d",&a,&b);
			p[a]=b;
		}
		int k1=0;
		na[k1]=p[1];
		while(p.count(na[k1]))
		{
			int t;
			t=p[na[k1]];
			k1++;
			na[k1]=t;
		}
		int k2=0;
		nb[k2]=p[2];
		while(p.count(nb[k2]))
		{
			int t;
			t=p[nb[k2]];
			k2++;
			nb[k2]=t;
		}
		int flag=0;
		for(int i=0;i<=k1;i++)
		{
			if(flag)
				break;
			for(int j=0;j<=k2;j++)
				if(na[i]==nb[j])
				{
					if(i<j)
						printf("You are my younger\n");
					else if(i>j)
						printf("You are my elder\n");
					else
						printf("You are my brother\n");
					flag=1;
					break;
				}
		}
	}
	return 0;
}
时间限制 1 秒
内存限制 32 MB
讨论 统计
上一题 下一题