一道简单的算法题

时间:2021-05-20 10:28:45
有一个老人在临死前把三个儿子叫到跟前,告诉他们把19头牛分了,老大分1/2,老二分1/4,老三分1/5,说完就死了.按当地习俗,不能宰牛.问三个儿子各能分多少?
请给出分析或算法

28 个解决方案

#1


1/2+1/4+1/5=19/20

#2


什么意思说清楚一点

#3


先从别处借一头牛,这样就有20了,然后按照规定的比例分配,最后刚好剩下一头,再还回去就行了

#4


这个题目记得高中学极限的时候老师给说过,用的就是楼上的方法。


#5


讓我想到了另外一個類型的問題

有27個人踢完足球去買飲料喝,每3個空瓶可以換1瓶新的,問至少買多少瓶就可以滿足每個人都可以有一瓶?

#6


倒。。。这样题目都还来
先借头牛凑成20头牛,不就是老大10头,老二5头,老三4头,最后把借的牛还回去

#7


小学题。。。汗

#8


你们能用程序实现吗,理论谁都懂

#9


假设从别人那里借来N头牛,那么牛的总数就是n=19+N;能满足分配
那么就可以得到等式n-n/2-n/4-n/5=N,因为最后还要把牛还给人家;
可以得到N=1;

#10


很简单的一个方法得出的结论,老大10,老二5,老三4,一共是19头对吗?
具体算法如下19+1=20
20*1/2=10
20*1/4=5
20*1/5=4
怎么样?简单不??lz

#11


我再声明一遍请用程序,这不是数学论坛

#12


空谈理论是毫无意义的!

#13


其实这个题目的关键正像2楼所说,“1/2+1/4+1/5=19/20”


是老大分1/2,老二分1/4,老三分1/5

这个“遗嘱”并没有把自己的全部财产分光19*(0.5+0.25+0.2)=18.05
也就是剩下了0.95个空余,而所谓借1头牛实际上是大家瓜分了这0.95个空余
(仍按照1/2:1/4:1/5的比例)
所以要较起真,借一头牛来分牛是不符合遗嘱的。

#14


要用程序表达一个思想首先要把这个思想明确下来,而不是现在这个玩弄语义和概念的模糊思想,当你要表达的东西都很模糊的时候,你指望程序能得到什么呢?

实际的例子想到用程序来解答其实是一个很好的想法

#15


数论学的好的话不妨解一解下面这个不定方程
(D+1)(1/A+1/B+1/C) = D
我记得大约有7、8个正整数解  上面的题目只是其中一种(D=19,A=2,B=4,C=5)

#16


看来小时候数学题做的太少。

#17


#18


为什么要借一个1过来?这个思路是怎么出来的?

#19


小学时学的,借汽水

#20


假设从别人那里借来N头牛,那么牛的总数就是n=19+N;能满足分配
那么就可以得到等式n-n/2-n/4-n/5=N,因为最后还要把牛还给人家;
可以得到N=1;

#21


void main()
{
int i;
for (i=0;i<1000;i++)
{
float j=19+i;
if(j==(j/2+j/4+j/5+i))
printf("%d",i);
printf("\n");
cin.get();
    }
}
这样写好像对的,不知道有没有存在问题,请高手指点!

#22


用浮点数的话很难保证没问题发生。。。
这个题的答案是整数的话,
我觉得还不如用整形,判断余数为0之后取商

#23


去借一只牛,就搞定了

#24


顶bargio_susie
1/2+1/4+1/5=19/20正解

#25


按老头的遗嘱,最终是“告诉他们把19头牛分了”,这样兄弟三人必须把所有的牛分完。
但是分配方法是“老大分1/2,老二分1/4,老三分1/5”,这里不是说三人分别拿总数的多少,应该理解成三人的分配比例是:1/2:1/4:1/5 =10:5:4。

这样是不是就非常简单了。三人分别拿 10/5/4。

这里有个启示:如果能准确理解客户需求,也就是“老头的遗嘱”,问题就可以迎刃而解了。

其实,程序员编程用什么算法都是次要的,解决问题是最重要的。
算法是为了解决问题提出来的,如果程序员为了自己轻松,什么事情都交给程序,那是不对的。



#26


嗯,明明小学时就知道:1+2+……+n=n*(n+1)/2,到现在写程序的时候居然还要写个循环来算,那就不是聪明的程序员

#27


弥勒拂 解释的不错! 顶你!

#28


如果能准确理解客户需求,也就是“老头的遗嘱”,问题就可以迎刃而解了。
----------------------------------------------------------------------
  很顯然大家都沒有理解老頭的意思,老頭分了19/20出去,是想留著1/20陪葬。既然不能宰牛,正確的處理方法是把所有牛賣了,拿出1/20的錢買點陪葬品,其餘的錢按比例分了

#1


1/2+1/4+1/5=19/20

#2


什么意思说清楚一点

#3


先从别处借一头牛,这样就有20了,然后按照规定的比例分配,最后刚好剩下一头,再还回去就行了

#4


这个题目记得高中学极限的时候老师给说过,用的就是楼上的方法。


#5


讓我想到了另外一個類型的問題

有27個人踢完足球去買飲料喝,每3個空瓶可以換1瓶新的,問至少買多少瓶就可以滿足每個人都可以有一瓶?

#6


倒。。。这样题目都还来
先借头牛凑成20头牛,不就是老大10头,老二5头,老三4头,最后把借的牛还回去

#7


小学题。。。汗

#8


你们能用程序实现吗,理论谁都懂

#9


假设从别人那里借来N头牛,那么牛的总数就是n=19+N;能满足分配
那么就可以得到等式n-n/2-n/4-n/5=N,因为最后还要把牛还给人家;
可以得到N=1;

#10


很简单的一个方法得出的结论,老大10,老二5,老三4,一共是19头对吗?
具体算法如下19+1=20
20*1/2=10
20*1/4=5
20*1/5=4
怎么样?简单不??lz

#11


我再声明一遍请用程序,这不是数学论坛

#12


空谈理论是毫无意义的!

#13


其实这个题目的关键正像2楼所说,“1/2+1/4+1/5=19/20”


是老大分1/2,老二分1/4,老三分1/5

这个“遗嘱”并没有把自己的全部财产分光19*(0.5+0.25+0.2)=18.05
也就是剩下了0.95个空余,而所谓借1头牛实际上是大家瓜分了这0.95个空余
(仍按照1/2:1/4:1/5的比例)
所以要较起真,借一头牛来分牛是不符合遗嘱的。

#14


要用程序表达一个思想首先要把这个思想明确下来,而不是现在这个玩弄语义和概念的模糊思想,当你要表达的东西都很模糊的时候,你指望程序能得到什么呢?

实际的例子想到用程序来解答其实是一个很好的想法

#15


数论学的好的话不妨解一解下面这个不定方程
(D+1)(1/A+1/B+1/C) = D
我记得大约有7、8个正整数解  上面的题目只是其中一种(D=19,A=2,B=4,C=5)

#16


看来小时候数学题做的太少。

#17


#18


为什么要借一个1过来?这个思路是怎么出来的?

#19


小学时学的,借汽水

#20


假设从别人那里借来N头牛,那么牛的总数就是n=19+N;能满足分配
那么就可以得到等式n-n/2-n/4-n/5=N,因为最后还要把牛还给人家;
可以得到N=1;

#21


void main()
{
int i;
for (i=0;i<1000;i++)
{
float j=19+i;
if(j==(j/2+j/4+j/5+i))
printf("%d",i);
printf("\n");
cin.get();
    }
}
这样写好像对的,不知道有没有存在问题,请高手指点!

#22


用浮点数的话很难保证没问题发生。。。
这个题的答案是整数的话,
我觉得还不如用整形,判断余数为0之后取商

#23


去借一只牛,就搞定了

#24


顶bargio_susie
1/2+1/4+1/5=19/20正解

#25


按老头的遗嘱,最终是“告诉他们把19头牛分了”,这样兄弟三人必须把所有的牛分完。
但是分配方法是“老大分1/2,老二分1/4,老三分1/5”,这里不是说三人分别拿总数的多少,应该理解成三人的分配比例是:1/2:1/4:1/5 =10:5:4。

这样是不是就非常简单了。三人分别拿 10/5/4。

这里有个启示:如果能准确理解客户需求,也就是“老头的遗嘱”,问题就可以迎刃而解了。

其实,程序员编程用什么算法都是次要的,解决问题是最重要的。
算法是为了解决问题提出来的,如果程序员为了自己轻松,什么事情都交给程序,那是不对的。



#26


嗯,明明小学时就知道:1+2+……+n=n*(n+1)/2,到现在写程序的时候居然还要写个循环来算,那就不是聪明的程序员

#27


弥勒拂 解释的不错! 顶你!

#28


如果能准确理解客户需求,也就是“老头的遗嘱”,问题就可以迎刃而解了。
----------------------------------------------------------------------
  很顯然大家都沒有理解老頭的意思,老頭分了19/20出去,是想留著1/20陪葬。既然不能宰牛,正確的處理方法是把所有牛賣了,拿出1/20的錢買點陪葬品,其餘的錢按比例分了