首页
学习
活动
专区
圈层
工具
发布

Java 版 C 语言经典 100 例(21 - 25)

1. 实例 21

1.1 题目

❝猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 ❞

1.2 思路

  1. 设第一天桃子数为 ,则第二天桃子数为 ,第三天桃子数为 …
  2. 反过来推,则
  3. 以此类推,从第 10 天类推到第一天是一个循环

1.3 代码

代码语言:javascript
复制
/**
 * @ClassName : TwentyOne
 * @Author : cunyu
 * @Date : 2020/6/23 7:59
 * @Version : 1.0
 * @Description : 实例 21
 **/

public class TwentyOne {
    public static void main(String[] args) throws Exception {
        // num:第10天的桃子数
        int num = 1;
        // 总的桃子数
        int sum = 0;

        // 逆向推,前一天的桃子数 = 2 * (后一天桃子数 + 1),前边有 9 天,所以循环 9 次
        for (int i = 0; i < 9; i++) {
            sum = 2 * (num + 1);
            num = sum;
        }

        System.out.println("桃子总数:" + sum);
    }
}

1.4 结果

代码语言:javascript
复制
桃子总数:1534

2. 实例 22

2.1 题目

❝两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a 说他不和 x 比,c 说他不和 x,z 比,请编程序找出三队赛手的名单。 ❞

2.2 思路

见代码注释即可

2.3 代码

代码语言:javascript
复制
/**
 * @ClassName : TwentyTwo
 * @Author : cunyu
 * @Date : 2020/6/23 8:27
 * @Version : 1.0
 * @Description : 实例 22
 **/

public class TwentyTwo {
    public static void main(String[] args) throws Exception {
        char a, b, c;
        System.out.println("对阵顺序表:");

        // 事先 a,b,c 均可能对阵上 x,y,z
        for (a = 'x'; a <= 'z'; a++) {
            for (b = 'x'; b <= 'z'; b++) {
                for (c = 'x'; c <= 'z'; c++) {
                    // a 不对阵 x,c 不对阵 x,z
                    if (a != 'x' && c != 'x' && c != 'z') {
                        // a,b,c 对阵选手不同
                        if (a != b && a != c && b != c) {
                            System.out.format("a --> %c\t b --> %c\tc --> %c", a, b, c);
                        }
                    }
                }
            }
        }
    }
}

2.4 结果

代码语言:javascript
复制
对阵顺序表:
a --> z	 b --> x	c --> y

3. 实例 23

3.1 题目

打印出如下图案(菱形)。

代码语言:javascript
复制
   *
  ***
 *****
*******
 *****
  ***
   *

3.2 思路

图形可拆分为两部分来看待,前四行一个规律,后三行一个规律,利用双重 for 循环,第一层控制行,第二层控制列

3.3 代码

代码语言:javascript
复制
/**
 * @ClassName : TwentyThree
 * @Author : cunyu
 * @Date : 2020/6/23 8:41
 * @Version : 1.0
 * @Description : 实例 23
 **/

public class TwentyThree {
    public static void main(String[] args) throws Exception {

        // 上半部分
        for (int i = 0; i < 4; i++) {
            for (int j = 4; j > i + 1; j--) {
                // 输出左上角位置的空白
                System.out.print(" ");
            }
            for (int j = 0; j < 2 * i + 1; j++) {
                // 输出菱形上半部边缘
                System.out.print("*");
            }
            // 换行
            System.out.println();
        }

        // 下半部分
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < i + 1; j++) {
                // 输出菱形左下角空白
                System.out.print(" ");
            }
            for (int j = 0; j < 2 * (3 - i) - 1; j++) {
                // 输出菱形下半部边缘
                System.out.print("*");
            }
            // 换行
            System.out.println();
        }
    }


}

3.4 结果

代码语言:javascript
复制
   *
  ***
 *****
*******
 *****
  ***
   *

4. 实例 24

4.1 题目

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

4.2 思路

从第 2 个数开始,后一个数的分母是前一个的分子,而分子则是前一个数的分子与分母之和

4.3 代码

代码语言:javascript
复制
/**
 * @ClassName : TwentyFour
 * @Author : cunyu
 * @Date : 2020/6/23 8:59
 * @Version : 1.0
 * @Description : 实例 24
 **/

public class TwentyFour {
    public static void main(String[] args) throws Exception {
        double sum = 0.0;
        float numerator = 2.0f;
        float denominator = 1.0f;

        // 从第 2 个数开始
        for (int i = 1; i <= 20; i++) {
            sum = sum + numerator / denominator;
            float tmp = denominator;
            // 后一个数的分母等于前一个数的分子
            // 而后一个数的分子等于前一个数的分子分母之和
            denominator = numerator;
            numerator += tmp;
        }

        System.out.println("最终结果:" + sum);
    }
}

4.4 结果

代码语言:javascript
复制
最终结果:32.660260796546936

5. 实例 25

5.1 题目

❝求 的和。 ❞

5.2 思路

类似于累加,详细情况见代码。

5.3 代码

代码语言:javascript
复制
/**
 * @ClassName : TwentyFive
 * @Author : cunyu
 * @Date : 2020/6/23 9:12
 * @Version : 1.0
 * @Description : 实例 25
 **/

public class TwentyFive {
    public static void main(String[] args) throws Exception {
        // 最终结果和第一个值
        long sum = 0;
        long num = 1;

        for (int i = 1; i <= 20; i++) {
            // i = 1,num = 1
            // i = 2,num = 1 * 2
            // i = 3,num = 1 * 2 * 3
            num = i * num;
            // 求和
            sum += num;
        }

        System.out.println("最终结果:" + sum);
    }
}

5.4 结果

代码语言:javascript
复制
最终结果:2561327494111820313
下一篇
举报
领券