学习小结

例:

#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--;

}

此题需要先将老大这个变量先取出才能继续计算,否则就会出错。

你可能感兴趣的:(学习小结)