Day29---学习Java第三弹

2021-08-08

Java经典编程例题(七)

20、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个

第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下

的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

package test;

public class test17 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int sum = 1;
        for (int i = 1; i <= 9; i++) {
            sum = (sum + 1) * 2;
        }
        System.out.println("第一天共摘了" + sum + "个桃子");
    }

}

分析:可以用for循环,也可以用方法的递归。
需要注意的点:用for循环时一共循环了九次

 

 

21、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定

比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出

三队赛手的名单。

package test;

public class test18 {
    public static void main(String[] args) {
        char a, b, c;
        for (a = 'x'; a <= 'z'; a++) {
            for (b = 'x'; b <= 'z'; b++) {
                for (c = 'x'; c <= 'z'; c++) {
                    if (a != b && b != c && a != c) { // 避免参赛队员重复比赛
                        if (a != 'x' && c != 'x' && c != 'z') { // 根据题意判断
                            System.out.println("a和" + a + ",b和" + b + ",c和" + c + "进行比赛");
                        }
                    }
                }
            }
        }
    }
}

分析:通过三层for循环历遍所有可能性,通过题意设置判断语句
需要注意的点:在判断之前需要设置if语句排除三个队员重复参赛

 

 

22、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

分析:可以看出,除第一项外,下一项的分子等于上一项的分子加上分母,下一项的分母

等于上一项的分子

package test;

public class test20 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int zi = 2, mu = 1;
        int temp = 0;
        double sum = 0;
        for (int i = 0; i < 20; i++) {
            sum += zi / mu;
            temp = zi;
            zi += mu;
            mu = temp;
        }
        System.out.println(sum);
    }

}

需要注意的点:对下一项的分子和分母复制时借助临时变量

 

 

23、求1+2!+3!+…+20!的和。

分析:写个求阶乘的方法,再在循环中调用即可

package test2;

import java.util.Scanner;

public class tset21 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int x = 20;
        long m = 0;
        for (int i = 1; i <= x; i++) {
            m += di(i);
        }
        System.out.println(m);
    }

    public static long di(int x) {
        long sum = 1;
        for (int i = 1; i <= x; i++) {
            sum *= i;
        }
        return sum;
    }
}

需要注意的点:sum和m的值应该用long类型

 

24、利用递归方法求5!。

 

package test2;

public class test22 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        test22 t = new test22();
        System.out.println(t.d(5));
    }

    public int d(int x) {
        if (x == 1)
            return 1;
        else
            return x * d(x - 1);
    }
}

 

分析:关键是递归的代码

需要注意的点:在截图中用的递归方法不是静态(static)的,所以如果想要使用需要先实例化这个方法所属于的类

 

 

明天继续

上一篇:0130 set接口


下一篇:0130 泛型 list接口