鱼C论坛

 找回密码
 立即注册
查看: 3037|回复: 10

OJ上题目:一家人 求帮助

[复制链接]
发表于 2014-10-16 19:52:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述
最近小明交了一个新朋友叫小宇,他们在聊天的时候发现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
原文链接:http://zju.acmclub.com/index.php?app=problem_title&id=1037&problem_id=1032
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-16 19:53:56 | 显示全部楼层
求思路。。我主要不知道2个人之前的联系应该怎么样存储?求解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 20:07:20 | 显示全部楼层
我脑袋笨………………看了半天才看懂了题意是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 20:57:59 | 显示全部楼层
#include <stdio.h>

int main()
{
        
        int num,son,fat;
        int a[2]={1,0}; //本人,辈级 
        int b[2]={2,0};
        scanf("%d",&num);
        while(num--)
        {
                if(a[0] == b[0])  break;
                scanf("%d%d",&son,&fat);
                if(son == a[0]){
                        a[0] = fat;
                        a[1]++;
                }
                if(son == b[0]){
                        b[0] = fat;
                        b[1]++;
                }        
        }
        
        if(a[2] > b[2]) 
                printf("You are my elder.\n"); 
        else if( a[2] < a[2])
                printf("You are my younger.\n");
        else
                printf("You are my brother.\n");
        return 0;
}

只是实现了样例,其中还有许多需要思考的,你自己改改吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 21:08:10 | 显示全部楼层
研究了一下  如果我要是输入
3
1 3
2 5
3 4
我是不是应该打印无解呢????   楼主看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 21:12:31 | 显示全部楼层
此题出题不够严谨   开始说一定会有解的,一定有关系,但是后面的数据输入又是任意输入,这样可能会出现输入的数据不能够证明他们是一家人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 21:37:56 | 显示全部楼层
看了上面的代码,我知道了  我似乎一点编程的思维都没有,  里面有几个错误,楼主改改,再做些数据输入预处理就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-16 22:56:53 | 显示全部楼层
elvo 发表于 2014-10-16 20:57
只是实现了样例,其中还有许多需要思考的,你自己改改吧

谢了,让我看见了能够这样把这两个数关联起来。。其他我自己就能够实现的。。本来我也想让一个变量来进行累加。。但是就是不够清晰。。所以谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-16 22:57:24 | 显示全部楼层
cong 发表于 2014-10-16 21:37
看了上面的代码,我知道了  我似乎一点编程的思维都没有,  里面有几个错误,楼主改改,再做些数据输入预处 ...

同样感谢帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-16 23:55:56 | 显示全部楼层
总算解决了。。结合楼上的代码在根据其他人的。贴上自己最后的代码
#include <stdio.h>
int main()
{
    int num,son,fath;
    int a[2] = {1,0};   //本人,辈级
    int b[2] = {2,0};
    int fami[21];       //将整个关系直接存在数组中。
    while(~scanf("%d",&num))
    {
        a[0] = 1;
        a[1] = 0;
        b[0] = 2;
        b[1] = 0;
        memset(fami,-1,sizeof(fami));
        while(num--)
        {
            scanf("%d%d",&son,&fath);
            fami[son] = fath;

        }

        while(fami[a[0]] > 0)
        {
            a[1]++;
            a[0] = fami[a[0]];
        }

        while(fami[b[0]] > 0)
        {
            b[1]++;
            b[0] = fami[b[0]];
        }

        if(a[1] > b[1])
        {
            printf("You are my elder\n");
        }
        else if(a[1] < b[1])
        {
            printf("You are my younger\n");
        }
        else
        {
            printf("You are my brother\n");
        }
    }



    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-10-30 17:48:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 04:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表