黑马程序员技术交流社区
标题:
猴子与桃的两种思路
[打印本页]
作者:
郑伟
时间:
2012-12-23 13:57
标题:
猴子与桃的两种思路
/*
海滩上有一堆桃子,五只猴子平分,第一只猴子把这堆桃子平均分了五份多了一个,
这只猴子把多的一个扔到海里,拿走了一份,第二只猴子把剩下的平均分成五份又多了一个,
他同样把多的一个扔进海里,拿走了一份,第三、四、五只猴子都这样做,
问海滩上原来最少有多少个桃子?
*/
public class Monkey {
public static void MPeach() {
int i = 4; // 假设的最后桃子个数(5个猴子都分完之后所剩的桃子),最后桃子个数一定是4个倍数(因为要分成5等份,而最后一只猴子拿走了一份)
int k = 0; // 分桃上次所剩桃子的个数
int count; // 分桃次数
int j;
int m;
while (i < 10000)// 最少桃子数的范围
{
count = 1;
m = i; // 倒着分完第count次后的桃子数
j = 0;
while (j < 5 ) {
k = i / 4 * 5 + 1;
i = k;
if (k % 4 == 0) { // 第count次分完后所剩的桃子书还是4的倍数
count++;
} else {
break;
}
j++;
}
i = m;
if (count == 5) {
break;
}
i += 4;
}
System.out.println(k);
}
public static void Mpeach02(){
int sum2; // 用来完成桃数运算的变量
int sum1 = 6; // 实际的桃子总数
int count ;
int index ;
boolean flag = true; // 控制外层循环
while (flag) {
index = 0; // 初始化分桃子的次数为0
count = 0; // 初始化为第一个猴子开始分桃子
sum2 = sum1; // 初始化逻辑运算的桃子总数为实际的桃子总数,因为此变量用于计算,所以值会改变,为了不影响实际的桃子总数,所以用此变量代替!
while (count < 5) {
if (sum2 % 5 == 1) { // 如果桃子总数除以5余1说明此桃子总数符合分桃方案
sum2 -= 1; // 因为桃子被猴子扔掉一个,所以要减1
sum2 = sum2 - sum2 / 5; // 又因为桃子被平均分为了5份并且被猴子拿走了1份,所以要减1/5
index++; // 如果符合分桃方案就将计数器加1
}
// 如果计数器等于5,也就是桃子的总数在符合分桃方案(sum2%5 == 1)的前提下分可5次的话!说明此桃子总数是符合条件的最小整数!
if (index == 5) {
System.out.println("最少有 " + sum1 + " 个桃子!");
flag = false;// 循环结束
}
count++;
}
sum1 += 5; // 桃子的总数只有每次递增5才可以符合分桃方案(sum2%5 == 1)!
}
}
public static void main(String[] args) {
MPeach();
Mpeach02();
}
}
复制代码
作者:
许庭洲
时间:
2012-12-31 07:29
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2