mes百度百科:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只

来源:百度文库 编辑:高考问答 时间:2024/05/03 12:35:51
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?

这题怎么做?
怎样编程

如果多了4个,那么没有桃子被扔入海中,最小的是5^5=3125。所以应该是5^5-4=3121

告诉楼主一个简单的办法
设原来有:5X+1
第一只拿走后还有:4X(设4X=5Y+1,下同)
第二只拿走后还有:4Y=5Z+1
第三只拿走后还有:4Z=5M+1
第四只拿走后还有:4M=5N+1
则第五只猴拿走的桃子为:N个

楼主可假设N=1,2,3....
直至使得X,Y,Z,M均为整数即符合题意.

采用倒推法,再加上整除性,第5只猴子应分得4^4-1=255个桃子,第4只猴子应分得(4^4*5-5+1)/4=4^3*5-1个桃子,第3只猴子应分得(4^3*5*5-5+1)/4=4^2*5^2-1个桃子,第2只猴子应分得(4^2*5^2*5-5+1)/4=4*5^3-1个桃子,第1只猴子应分得(4*5^3*5-5+1)/4=5^4-1个桃子。那么,原来总共有桃子5^4*5-5+1=5^5-4=3121个桃子。

运行示例:
./monkey 5

运行结果:
total=3121

程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char **argv)
{
int monkey_num;
double total;
if (argc < 2)
{
fprintf(stderr, "Usage: %s <monkey_num>\n", argv[0]);
return 1;
}
monkey_num = atoi(argv[1]);
total = pow(monkey_num, monkey_num) - monkey_num + 1;
printf("total=%.16lg\n", total);
return 0;
}

5*5*5*5*5 +5*5*5*5 +5*5*5+ 5*5 +5 +1=
你算出来就是结果!

22656