这个问题主要是因为不知道第5个人,也就是E拿走了多少鱼,如果最后一个人拿走的比如说是k条鱼,那么最后总共剩余是5k,就是最后这个将这一堆鱼平均分成5份时,没有再多一条鱼,是正好是5的倍数。如果知道了k的值,依次往回递推就能知道最开始的X(一共打多少鱼)是多少条了。
那么关键是这个5k怎么确定,程序中定义了一个静态的i,就是这个i一直存在,值是一直往上加的,它先从0开始向上加,加到5的话,此时5是5的整数倍,这时假定最后一个E的时候总剩余是5条,就返回6,因为E还扔掉一条。那么D的时候总剩余就是应改是 (6*5/4)+1,这个时候发现不是整数,那么就是第一次返回的6不对
又从6开始往上加 ,加到10的时候是5的倍数,于是返回11, (11*5/4)+1仍然不是整数,所以又回到E这次,11继续往上加,加到15,15是5的倍数,返回16, (16*5/4)+1 =21是整数,那么就暂时认定D的时候总剩余是21 ,再用返回的21去计算C的时候总剩余 (21*5/4)+1 发现又不是整数,那么又重新回到E的时候,E上次返回是16 ,此时16继续往下加。。。。。。。。
如此反复,直到能够推出A的时候总鱼数是整数的时候程序才结束