例:
#include <stdio.h>
int main()
{
int ave;
int i;
int j;
int a [ 6 ];
int b [ 6 ];
ave = 2520/6;
j = 6;
a [ 0 ] = (ave-ave/2)*8/7;
b [ 0 ] = a [ 0 ];
a [ 1 ] = ave*7/6-a [ 0 ]/8;
b [ 1 ] = ave*7/6;
for( i = 2; i<6; i++)
{
a [ i ] = ave*j/(j-1)-b [ i-1 ]/(j+1);
b [ i ] = ave*j/(j-1);
j--;
}
printf("the first son have %d orange\n",a [ 0 ]);
printf("the second son have %d orange\n",a [ 1 ]);
printf("the third son have %d orange\n",a [ 2 ]);
printf("the fourth son have %d orange\n",a [ 3 ]);
printf("the fifth son have %d orange\n",a [ 4 ]);
printf("the sixth son have %d orange\n",a [ 5 ]);
}
此题用倒推方法考虑,每人调换完后都是平均值。题中老大分的桔子规律与其他五个儿子的有些不同,所以从老大开始。老六最后第二次分配后是平均值的3/2,分老大1/3,老大也是平均值,所以老大第一次分配后是平均值的1/2。第一次分配后老大有原先的7/8,所以原先有平均的4/7。其他五子排序2-6,由原先的(8-n)/(9-n)加上上一人的1/(10-n),算法为:
for( i = 2; i<6; i++)
{
a [ i ] = ave*j/(j-1)-b [ i-1 ]/(j+1);
b [ i ] = ave*j/(j-1);
j--;
}
此题需要先将老大这个变量先取出才能继续计算,否则就会出错。