五家共井
来源:互联网 发布:淘宝客服热线 编辑:程序博客网 时间:2024/06/17 13:48
算法题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,以这个条件跳出循环。
- 五家共井
- 五家共井
- 五家共井
- 五家共井问题
- 五家共井问题
- 第二题 五家共井
- 算法学习之五家共井
- 经典算法题02-五家共井
- 算法学习笔记之五家共井问题
- 算法学习笔记之五家共井问题
- Java经典算法——五家共井
- 经典算法题每日演练——第二题 五家共井
- 经典算法题每日演练——第二题 五家共井
- 经典算法题——第二题 五家共井
- 经典算法题每日演练——第二题 五家共井
- mybatis番外篇(一)自动生成键selectkey
- urllib 详解
- leetcode1--Two Sum
- HashMap、HashTable、LinkedHashMap和TreeMap
- linux的nohup命令的用法
- 五家共井
- $.parseJSON(data)只支持标准的JSON
- 微信测试订阅号开发错误总结
- UIView.frame的骗局
- 产奶量》》》简单选择排序
- OnCreate PreCreateWindow PreSubclassWindow
- 内部类初次使用
- 黑盒测试用例设计方法之等价类划分
- mysql profile及其对应表使用