德国开元华人社区 开元周游

标题: 半年前人家给我出道题,我偷懒编程解决了。 [打印本页]

作者: jh2009    时间: 17.9.2009 16:55
标题: 半年前人家给我出道题,我偷懒编程解决了。
本帖最后由 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();
    }
}
作者: 有容乃大    时间: 17.9.2009 18:40
结果?
作者: jh2009    时间: 17.9.2009 18:50
结果一运行就出来了,不放结果大家还可以自己算一算,调剂一下。
作者: 有容乃大    时间: 17.9.2009 18:52

作者: shosho    时间: 17.9.2009 18:57
编程高手?
作者: vonbun小受    时间: 17.9.2009 19:38
从楼主程序的定义来看,应该假设三人年龄都是整数了?
那就不对了吧?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,其实没必要加绝对值的。
作者: vonbun小受    时间: 17.9.2009 19:45
弱弱地问下,如果解决了,请问答案是?
作者: jh2009    时间: 17.9.2009 19:55
你分析得其实没错,只是没想到C年龄可能不是整数的情况。
作者: vonbun小受    时间: 17.9.2009 20:04
本帖最后由 vonbun小受 于 17.9.2009 21:17 编辑

哦,高在这里,实在是高!同是年龄,A和B求解时直接设为整数,偏偏C的解是有理数。这题目。。。
那就改一下,按同样的方法,可以推出C是4.5的整数倍。那就是A=54,B=45,C=4.5喽?
而且排除法易知这是唯一解。
作者: vonbun小受    时间: 17.9.2009 20:07
楼主程序里的定义也考虑不周吧?你把A和B当成是按双精度存放的整数,可是题目里没告你A和B都是整数。不过这并不影响A-B是9的整数倍这个结论。其他的不变,答案也不变。
作者: jh2009    时间: 17.9.2009 20:46
题目说:A年龄数字个位和十位的位置对调一下就是B的年龄  已经暗示AB年龄是整数了。至少我是这么认为的。
作者: 有容乃大    时间: 17.9.2009 20:49
题目说:A年龄数字个位和十位的位置对调一下就是B的年龄  已经暗示AB年龄是整数了。至少我是这么认为的。
jh2009 发表于 17.9.2009 21:46

好像是应该这样理解。
作者: 有容乃大    时间: 17.9.2009 20:55
一般人都把年龄默认为整数,如果不用编程,还真不好想。
作者: vonbun小受    时间: 17.9.2009 21:00
题目说:A年龄数字个位和十位的位置对调一下就是B的年龄  已经暗示AB年龄是整数了。至少我是这么认为的。
jh2009 发表于 17.9.2009 21:46

我觉得本题如果是整数则都应是整数,或者都没有此限制。不应该有的默认为整数,有的求出来却是小数。这题目的数字设计得不好。
作者: 有容乃大    时间: 17.9.2009 21:33
正解。
作者: 有容乃大    时间: 17.9.2009 21:34
动动脑筋,娱乐一下。
作者: jh2009    时间: 17.9.2009 22:26
这题目和玩24点里面经典的 1555,3388, 3377是接近的构思。

别看答案先自己算算看。


作者: 有容乃大    时间: 18.9.2009 14:09
cool,又一个智力题。
作者: 农大    时间: 19.9.2009 17:08
懒得算了。。答案。。
作者: 西江月    时间: 22.9.2009 16:51
不太懂24点。
作者: slstone    时间: 25.9.2009 12:34
kankan
作者: yff2009cn    时间: 25.9.2009 19:20
[quote][/quote
作者: 三岛由纪夫    时间: 26.9.2009 09:59
A、B、C三人年龄未知。A年龄数字个位和十位的位置对调一下就是B的年龄;C的年龄两倍是A与B两个年龄之差;B的年龄是C的十倍。问:A、B、C三人的年龄各是多少?

public class Ages {

    private int x, y;
    priv ...
jh2009 发表于 17.9.2009 17:55


貌似没有整数解

小学数论题目:

A: (ab) -- 10a+b
B: (ba) -- 10b+a
C: 9(b-a) if b>a
    9(a-b) if a>b

10b+a = 10*9(b-a) if b>a
10b+a = 10*9(a-b) if a>b

i.e.
91a = 80b if b>a
100b = 89a if a>b

无整数解
作者: 三岛由纪夫    时间: 26.9.2009 10:12
A、B、C三人年龄未知。A年龄数字个位和十位的位置对调一下就是B的年龄;C的年龄两倍是A与B两个年龄之差;B的年龄是C的十倍。问:A、B、C三人的年龄各是多少?

public class Ages {

    private int x, y;
    priv ...
jh2009 发表于 17.9.2009 17:55


我反算了一下,楼主一定是记错了一个数字:

原题中,B的年龄是C的“六”倍或“五”倍

解得整数解:

A: 45
B: 54
C: 9



A: 54
B: 45
C: 9
作者: jh2009    时间: 26.9.2009 12:21
这个题目要是那么简单,就真的是小学生题目了。
作者: 三岛由纪夫    时间: 26.9.2009 13:17
这个题目要是那么简单,就真的是小学生题目了。
jh2009 发表于 26.9.2009 13:21


你的算法不也就是穷举了一下吗?

连《数据结构》这本书都用不上

有空儿答一下我的“类华容道”题吧
作者: jh2009    时间: 26.9.2009 14:36
这是个大家都可以没事动动脑的娱乐而已,搞那么复杂谁还来玩啊。
作者: 有容乃大    时间: 27.9.2009 09:16
17楼的题还没人能解?
作者: st7895123    时间: 27.9.2009 09:39
很好很强大
作者: qwertyuio    时间: 27.9.2009 10:18
dfsdf




欢迎光临 德国开元华人社区 开元周游 (https://forum.kaiyuan.de/) Powered by Discuz! X3.2