五家共井

算法题2
源:http://www.cnblogs.com/huangxincheng/archive/2012/08/06/2625427.html
五家人共用一口井,甲家的绳子用两条不够,还要再用乙家的绳子一条才能打到井水;乙家的绳子用三条不够,还要再用丙家的绳子
一条才能打到井水;丙家的绳子用四条不够,还要再用丁家的绳子一条才能打到井水;丁家的绳子用五条不够,还要再用戊家的绳子一条才能打到井水;戊家的绳子用六条不够,还要再用甲家的绳子一条才能打到井水。
最后问:井有多深?每家的绳子各有多长?

我还是按照原文章去理解,设甲的长度为a,乙的长度为b,丙的长度为c,丁的长度为d,戊的长度为e,设井的长度为h,
则有:
2a + b = h;
3b + c = h;
4c + d = h;
5d + e = h;
6e + a = h;
则进行处理得到:
a = b + c/2;
b = c + d/3;
c = d + e/4;
d = e + a/5;
这里的绳子都是整条的,所以原作者推出c是2的倍数,d是3的倍数,e时4的倍数,a是5的倍数。在这里需要确定2个数然后去推导其他的数,为了减少推导数量,我们可以从a,c,d,e中选择2个数作为已知的。假设我们已知d和e。

`void functionTwo()
{
    int a=0,b=0,c=0,d=0,e=0;
    bool flag = true;
    while (flag)
    {
        d += 3;
        e = 0;
        while (flag)
        {
            e += 4;

            c = d + e/4;
            if(c%2 != 0)
            {
                continue;
            }

            b = c + d/3;

            a = b + c/2;
            if (a%5 != 0)
            {
                continue;
            }

            if ((d - a/5) < e)
            {
                break;
            }
            if ((d - a/5) == e)
            {
                flag = false;
            }

        }
    }

    printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);
    int h1 = 2*a + b;
    int h2 = 3*b + c;
    int h3 = 4*c + d;
    int h4 = 5*d + e;
    int h5 = 6*e + a;
    printf("h1=%d h2=%d h3=%d h4=%d h5=%d\n",h1,h2,h3,h4,h5);
}`

现在这个问题就变成了一个问题,就是d与e怎么搭配,才能让等式成立,则需要一个循环去处理,我们按照以前的逻辑,可能跑不出循环。那先让d是第一个循环,那么e什么时候停止增加,出来让d增加呢? 因为最后我们要去判断((d - a/5) ? e)的关系,我们认为d要增加是因为(d - a/5) < e,以这个条件跳出循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值