开元周游
德国频道
查看: 3254|回复: 29
打印 上一主题 下一主题

半年前人家给我出道题,我偷懒编程解决了。

[复制链接]
跳转到指定楼层
1#
发表于 17.9.2009 16:55:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jh2009 于 19.9.2009 22:00 编辑

A、B、C三人年龄未知。A年龄数字个位和十位的位置对调一下就是B的年龄;C的年龄两倍是A与B两个年龄之差;B的年龄是C的十倍。问:A、B、C三人的年龄各是多少?

public class Ages {

    private int x, y;
    private static Ages INSTANCE = null;
   
    private Ages(){
        //Nothing to do
    }
   
    public static Ages getInstance(){
        if (INSTANCE==null){
            INSTANCE = new Ages();
        }
        return INSTANCE;
    }

    private double ageA() {
        return 10 * x + y;
    }

    private double ageB() {
        return 10 * y + x;
    }

    private double ageC() {
        return ageB() / 10;
    }

    public boolean condition() {
        boolean condition = (2 * ageC() == ageA() - ageB()) || (2 * ageC() == ageB() - ageA());
        return condition;
    }

    private void computeAges() {
        for (x = 1; x < 9; x++) {
            for (y = 1; y < 9; y++) {
                if (condition()) {
                    System.out.println("Result:");
                    System.out.println("A=" + ageA());
                    System.out.println("B=" + ageB());
                    System.out.println("C=" + ageC());
                }
            }
        }
    }

    public static void main(String[] args) {
        Ages.getInstance().computeAges();
    }
}

评分

1

查看全部评分

2#
发表于 17.9.2009 18:40:07 | 只看该作者
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 17.9.2009 18:50:45 | 只看该作者
结果一运行就出来了,不放结果大家还可以自己算一算,调剂一下。
回复 支持 反对

使用道具 举报

4#
发表于 17.9.2009 18:52:09 | 只看该作者
回复 支持 反对

使用道具 举报

5#
发表于 17.9.2009 18:57:47 | 只看该作者
回复 支持 反对

使用道具 举报

6#
发表于 17.9.2009 19:38:17 | 只看该作者
从楼主程序的定义来看,应该假设三人年龄都是整数了?
那就不对了吧?A与B的关系是个位和十位对调,那么A与B的差一定是9的倍数。C的2倍又是A与B的差,且2和9互质,那么C一定是9的倍数。那么C应该只可能是9岁,18岁,27岁。。。
如果C是9岁,则B是90岁,A也是9岁,就算把“A与B的差”理解成|A-B|,也不符合C的2倍是A与B的差。
如果C是18岁,则B是180岁,A是108岁,也不符合C的2倍是A与B的差。不过其实C大于9岁的情况已经没必要讨论了,如果真有这样的C,那B早就破了人类长寿者的吉尼斯世界记录了。
所以简单排除就知道本题无解,另外,小学生课本里“A与B的差”应该理解成A-B,其实没必要加绝对值的。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

7#
发表于 17.9.2009 19:45:42 | 只看该作者
弱弱地问下,如果解决了,请问答案是?
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 17.9.2009 19:55:21 | 只看该作者
回复 支持 反对

使用道具 举报

9#
发表于 17.9.2009 20:04:41 | 只看该作者
本帖最后由 vonbun小受 于 17.9.2009 21:17 编辑

哦,高在这里,实在是高!同是年龄,A和B求解时直接设为整数,偏偏C的解是有理数。这题目。。。
那就改一下,按同样的方法,可以推出C是4.5的整数倍。那就是A=54,B=45,C=4.5喽?
而且排除法易知这是唯一解。
回复 支持 反对

使用道具 举报

10#
发表于 17.9.2009 20:07:39 | 只看该作者
楼主程序里的定义也考虑不周吧?你把A和B当成是按双精度存放的整数,可是题目里没告你A和B都是整数。不过这并不影响A-B是9的整数倍这个结论。其他的不变,答案也不变。
回复 支持 反对

使用道具 举报

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

本版积分规则

站点信息

站点统计| 举报| Archiver| 手机版| 小黑屋

Powered by Discuz! X3.2 © 2001-2014 Comsenz Inc.

GMT+1, 13.11.2024 05:22

关于我们|Apps

() 开元网

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