- class demo {
- /**
- * @param args
- *
- 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,
- 这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,
- 同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int i;
- int tmp = 1;
- int aPart, num;
-
- while(true){
- // 第五个猴子一份aPart个桃子,五猴平分前共有num个桃子
- aPart = tmp;
- num = aPart*5+1;
- // 第五个猴子桃子总数为第四个猴子拿走桃子个数的4倍,第四个猴子桃子总数为第三个猴子拿走桃子个数的4倍,
- // 即每个猴子桃子总数为4的倍数
- // 但第一个猴子桃子总数不是第0个猴子拿走桃子个数的4倍,所以第一个猴子的桃子总数不用是4的倍数
- for (i=5; (num&3)==0; i--){
- if(i==2){
- num = (num>>2)*5+1;
- System.out.println("海滩上原来最少有"+num+"个桃子。");
- return;
- }
- num = (num>>2)*5+1;
- }
- tmp++;
- }
- }
- }
- /* 结果为3121个
- * 猴子: 1 2 3 4 5
- * 拿走: 624 499 399 319 255
- * 总数: 3121 2496 1996 1596 1276
- */
复制代码 |