题目:日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将2520个桔子分给六个儿子。分完后父亲说:“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子?
网上找了几个c语言的,借鉴(抄袭)了一下(全部),脸红.
思路:
1桔子一样多,平均数2520/6,每个人420个;
2老六等人(除了老大)都是"连同原先的桔子"分给下一个人,其中老六分走1/3之后为420个,因此可以得出分走之前的数量为420/(2/3)=630,所以分给老大的是630-420=210个;
3找规律依次分1/8,1/7,1/6,1/5,1/4,1/3;
4一圈分完,老大得到老六的210个满足平均数420,说明最开始老大分给老二之后只剩420-210=210个,210所占比例为1-(1/8)=7/8;所以老大原有210/(7/8)=240个;
5得出规律 :
老大 240 个 减去 (240-210)=30 剩余210
老大原有210/(7/8)=240个
老二 剩余420
反推 有 420/(6/7)=490个
原有490-30=460
老三 剩余420
反推 有 420/(5/6)= 个
原有
老四 剩余420
反推 有 420/(4/5)= 个
原有
老五 剩余420
反推 有 420/(3/4)= 个
原有
老六 剩余420
反推 有 420/(2/3)= 个
原有
class Test34{
public static void main(String []args){
int avge=2520/6;//平均每人
int a[]=new int[6];
int left=0;
for(int i=0;i<6;i++){
if(i==0){
a[i]=(avge-210)*(8-i)/(7-i)-left;
/* 老六拿到后连同原先的桔子分1/3给老大,
所以老六没分给老大之前是420*3/2=630,
分给老大的是630/3=210; */
left=a[i]+left-(avge-210);
}
else{
a[i]=avge*(8-i)/(7-i)-left;
left=a[i]+left-avge;
}
System.out.println(i+1+","+a[i]);
}
}
}