题目描述:
有5个人偷了一堆苹果,他们准备在第二天进行分赃。晚上,有一个溜出来,他把所有苹果分成了5份,但是多了一个,他顺手把多的一个苹果扔给树上的猴子,自己先拿1/5藏了起来。没想到其他四人也是这么想的,都如第一个人一样把苹果分成5份,把多的那一个扔给了树上的猴,偷走了1/5。第二天,大家分赃,也是分成5份多一个扔给猴子。最后一人分了一份。问:共有多少苹果?
思路:
我们直接把过程模拟一遍,反向思考即可:
刚开始一个人分苹果 假设总是为A 那么 他扔掉一个 然后拿走 4/5 剩下了 4/5(A-1)
下一个人:4/5(4/5(A-1)-1)
...
最后一天 五个人分 最后刚好分为5份 一人一个
#include <stdio.h>
#include <math.h>
int main() {
int s;
for (s = 5; ; s++) {
if (s % 5 == 1) {
// 第一个人分苹果,可以分了5份还剩1个
int l = s - (s / 5) - 1;
if (l % 5 == 1) {
// 第二个人分苹果,可以分了5份还剩1个
int m = l - (l / 5) - 1;
if (m % 5 == 1) {
// 第三个人分苹果,可以分了5份还剩1个
int n = m - (m / 5) - 1;
if (n % 5 == 1) {
// 第四个人分苹果,可以分了5份还剩1个
int o = n - (n / 5) - 1;
if (o % 5 == 1) {
// 第五个人分苹果,可以分了5份还剩1个
int p = o - (o / 5) - 1;
if (p % 5 == 1) {
printf("苹果总数符合5次分苹果都剩一个最小值: %d\n", s);
return 0;
}
}
}
}
}
}
if (s > 20000) {
printf("超过20000次仍未找到符合条件的结果\n");
break;
}
}
return 0;
}