题目一:
* 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
* 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
* 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
int num = 1;
for(int i = 0; i<9; i++){
num = (num + 1) * 2 ;
}
System.out.println("桃子数:"+num);
题目二:
海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
思路分析:
1:倒推法
第5只猴子分后最少剩4个
因为剩的桃子肯定是4的倍数,所以循环为4的累加,一直循环到找到符合条件的数(自己设定循环结束)
公式为:上个猴分桃数 = 剩的桃子数 + 1 + 剩桃/4(上一个猴子拿走的桃数)
2:正推法
没分之前的桃子数最少是6,每次的桃子肯定是5个猴子分,所以循环为5的累加,一直循环到找到符合条件的数(自己设定循环结束)
公式为:下次分桃数 = ((桃子数 - 1)/5) * 4
注: 1、外层循环的值不能更改
2、用continue结束不符合条件的循环,进行下一次循环。
py:for(int i = 0;true;i+=4){ //一直循环,知道找到符合条件的i
int x = i;//不能直接用i 会改变外层循环
for(int j = 0; j<4;j++){
if(x%4 == 0 && x%5 == 1){
x = x + 1 + (x/4);
}else {
continue py;//结束本次循环,进行下一次循环
}
}
System.out.println(x);//程序运行到这里表示x一定符合题目条件,且是最少
break py;//结束循环,不然会一直循环下去
}
题目三:
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
思路:按照规律,两个月后,本月兔子数 = 上两个月的兔子数相加。
import java.util.*;
public class Test {
public static void main(String []args){
//兔子3个月后每月生一对
Scanner myScanner = new Scanner(System.in);
System.out.print("prese inter month:");
int a = myScanner.nextInt();
int sum = fun(a);
System.out.println(sum);
}
public static int fun(int n)//每个月兔子数
{
if(n == 1 || n == 2)
return 1;
else
return fun(n-1) + fun(n-2);
}
}
//从键盘输入值
import java.util.*;
public class Test {
public static void main(String []args){
//兔子3个月后每月生一对
Scanner myScanner = new Scanner(System.in);
System.out.print("prese inter month:");
int a = myScanner.nextInt();
}