/*
* 海滩上有一堆桃子,五只猴子来分。
* 第一只猴子把这堆桃子平均分为五份,多了一个,
* 这只猴子把多的一个扔入海中,拿走了一份。
* 第二只猴子把剩下的桃子又平均分成五份,又多了一个,
* 它同样把多的一个扔入海中,拿走了一份,
* 第三、第四、第五只猴子都是这样做的,
* 问海滩上原来最少有多少个桃子? 桃子的个数有多少种可能?100内的数
*/
* 海滩上有一堆桃子,五只猴子来分。
* 第一只猴子把这堆桃子平均分为五份,多了一个,
* 这只猴子把多的一个扔入海中,拿走了一份。
* 第二只猴子把剩下的桃子又平均分成五份,又多了一个,
* 它同样把多的一个扔入海中,拿走了一份,
* 第三、第四、第五只猴子都是这样做的,
* 问海滩上原来最少有多少个桃子? 桃子的个数有多少种可能?100内的数
*/
public static void main(String[] args) {
int now = 0;
int loop = 5;
ArrayList<Integer> counts = new ArrayList<Integer>();
for(int i=1;i<=100;i++){
now = i;
for(int j=loop;j>0;j--){
if(now%loop==1){
now=(i-1)*(loop-1)/loop;
if(j==1){
counts.add(i);
}
}else{
continue;
}
}
}
System.out.println("个数:"+counts.size());
for (Integer integer : counts) {
System.out.println(integer);
}
}
}执行结果
个数:4
21
46
71
96
最小值是3121。
下面是代码和执行结果。import java.util.ArrayList;public class Test {
public static void main(String[] args) {
int now = 0;
int loop = 5;
ArrayList<Integer> counts = new ArrayList<Integer>();
for (int i = 1; i <= 50000; i++) {
now = i;
for (int j = loop; j > 0; j--) {
if (now % loop == 1) {
now = (now - 1) * (loop - 1) / loop;
if (j == 1) {
counts.add(i);
}
}
}
}
System.out.println("个数:" + counts.size());
for (Integer integer : counts) {
System.out.println(integer);
}
}
}执行结果个数:16
3121
6246
9371
12496
15621
18746
21871
24996
28121
31246
34371
37496
40621
43746
46871
49996
我也是菜鸟 给出一种实现方法 欢迎楼主和大家指教package com.test;public class HZFT {
/**
* @param args
* 猴子分桃问题
*/
public static void main(String[] args) {
int j ,count;
double i = 0;
for (count = 1 ;count<1000;count++){//count的上限以有结果为目的 可以更大点
i = count; //count的值可以理解为最后一只猴子拿走的桃的数量
for ( j = 0;j<4;j++){ //这是5个猴子的情况
i = (i*5+1)/4;
}
i = i*5+1;
if(isNum(i)){ //只有i是整数的时候才是符合要求的
System.out.println(count);
System.out.println("桃子的总数可能个数有:"+(int)i);
}
}
}
public static Boolean isNum(double i){ //判断是否是整数
String str = i+"";
str = str.replace(".","点"); //小数点的正则不会写 额 正则就不会 所以出此下策
String[] st = str.split("点");
if(st[1].equals("0")){
return true ;
}else{
return false ;
}
}
}
public static void main(String[] args) {
Test t= new Test();
int j;
for(int i=0;i<1000;i++){
//后面的猴子拿到的桃子必须乘以5,加1,后被4整除
j =((i*5)+1)%4;
//只有j=0的时候才为合法值
if(j==0){
Integer m=i;
//递归4次获取第一只猴子获取的桃子个数
for(int a=0;a<4;a++){
m=t.getSum(m);
if(m==null){
break;
}
}
if(m!=null){
System.out.println("第5只猴子分到的个数"+i);
System.out.println(m*5+1);
System.out.println("-------------");
}
}
}
}
/**
* 获取前面猴子得到的桃子的个数
* @return
*/
public static Integer getSum(int i){
//判断是否合法
if(((i*5)+1)%4==0){
return (i*5+1)/4;
}else{
return null;
}
}
}
第5只猴子分到的个数255
3121
-------------
第5只猴子分到的个数511
6246
-------------
第5只猴子分到的个数767
9371
-------------
所以满足要求需要的最少的桃子是3121个
public static void main(String arg[]){
int a;
int i;
for(int n=7;n<50000;n++){
if((n-1)%5==0){
a=(n-1)/5;
for(i=0;i<4;i++){
if((4*a-1)%5==0){
a=(4*a-1)/5;
}
else{
break;
}
}
if(i==4){
System.out.println(n);
}
}
}
}}
我们算的是一样的!