Java 培训第一天比较不懂得小题目和几个忽略的小点

题目一:

* 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
* 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
* 到第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();
    }

 

posted @ 2022-01-06 10:29  c-liyao  阅读(35)  评论(0)    收藏  举报