当前位置 博文首页 > m0_46212244的博客:java基础练习题目

    m0_46212244的博客:java基础练习题目

    作者:[db:作者] 时间:2021-09-23 13:33

    1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    import java.sql.SQLOutput;
    import java.util.Scanner;
    
    /**
     * 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
     * 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
     *
     * 解题思路:1月--1对  2月--1对  3月--2对 4月--3对 5月--5对 6月--8对 7月--13对
     * 由此可得规律从第三月开始,数量都是前两个月的和,即3月等于1月加2月
     * 4月等于3月加2月  5月等于4月加3月 .......
     */
    public class Test01 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);   // 创建Scanner对象来接收键盘输入的数据
            System.out.println("请输入你要计算的月数:");
            int num = scanner.nextInt();   // 将键盘输入的信息扫描为int
            if (num == 1) {  // 如果为1月的时候 直接打印出
                System.out.println(num + "月的兔子是" + num + "对" + "," + "总数是" + num * 2);
                return;
            } else if (num == 2) { // 如果为2月的时候 直接打印出
                System.out.println(num + "月的兔子是" + (num - 1) + "对" + "," + "总数是" + (num - 1) * 2);
                return;
            }
            int[] list = new int[num];  // 定义一个动态的数组,用来存储
            list[0] = list[1] = 1;   // 因为1月和2月都是1对 所以直接赋值1
            for (int i = 2; i < num; i++) {  // 从2开始遍历 也就是3月开始遍历添加
                list[i] = list[i - 1] + list[i - 2];  // 从上方解题思路可得的计算
                System.out.println((i + 1) + "月的兔子是" + list[i] + "对" + "," + "总数是" + 2 * list[i]);
            }
        }
    }
    以下为打印结果:
    请输入你要计算的月数:
    12
    3月的兔子是2,总数是4
    4月的兔子是3,总数是6
    5月的兔子是5,总数是10
    6月的兔子是8,总数是16
    7月的兔子是13,总数是26
    8月的兔子是21,总数是42
    9月的兔子是34,总数是68
    10月的兔子是55,总数是110
    11月的兔子是89,总数是178
    12月的兔子是144,总数是288
    
    

    2.判断101-200之间有多少个素数,并输出所有素数。

    /**
     * 判断101-200之间有多少个素数,并输出所有素数。
     *
     * 解题思路:素数又叫质数,就是除了1和它本身之外没有整数能被它整除的数。
     * 先定义一个for循环遍历101 - 200 然后再定义for循环用来做除数
     * 判断i 能不能整除 j
     */
    public class Test02 {
        public static void main(String[] args) {
            int num = 0;    // 用来累加素数个数
    
            for (int i = 101; i < 200; i++) {
                boolean b = false;
                for (int j = 2; j < i; j++) {
                    if ( i % j == 0) {  // 如果为true 即i能整除j
                        b = false; // b的值还是false
                        break;  // 到这里结束当前i的循环
                    } else { // 如果不能整除
                        b = true;  // 重新赋值为true
                    }
                }
                if (b) { // 当b为true时
                    num++; // 素数个数加1
                    System.out.println(i+ "\t"); // 打印当前i 即素数
                }
            }
            System.out.println(num);  // 打印素数的总数
        }
    }
    
    打印结果:
    101	103	107	109	113	127	131	137	139	149	151	157	163	167	173	179	181	191	193	197	199	素数的总数是:21
    

    3.打印出100–999所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方

    package com.company.practice;
    
    /**
     * 打印出100--999所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
     * 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
     */
    public class Test03 {
        public static void main(String[] args) {
            for (int i = 100; i <= 999; i++) {
    
                int a = i / 100;  // 拿出当前数的百位
                int b = (i - a * 100) / 10;  // 拿出当前数的十位
                int c = i - a * 100 - b * 10; // 拿出当前数的个位
                int sum = a * a * a + b * b * b + c * c * c;  // 计算百位 十位 个位 的立方和
                if (sum == i) {         // 如果sum等于i
                    System.out.println(sum);  // 打印出100 -- 999 的所有水仙花数
                }
            }
        }
    }
    
    打印结果:
    153
    370
    371
    407
    

    4.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

    package com.company.practice;
    
    import java.util.Scanner;
    
    /**
     * 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
     *
     * 解题思路:先将字符串转换为一个字符串数组,然后遍历判断
     */
    public class Test04 {
        public static void main(String[] args) {
    
            int english = 0;    // 文字母个数
            int space = 0;      // 空格键个数
            int num = 0;        // 数字个数
            int other = 0;      // 其他字符个数
            Scanner scanner = new Scanner(System.in);  // 创建Scanner对象来接收键盘输入的数据
            System.out.println("请输入任意字符:");
            String str = scanner.nextLine();        // nextLine()方法返回的是输入回车之前的所有字符。
            char[] chars = str.toCharArray();       // 将字符串对象中的字符转换为一个字符数组
            for (int i = 0; i < chars.length; i++) {
                if (Character.isLowerCase(chars[i])){  // 遍历判断数组中的对应下标元素是否为字母
                    english++;
                } else if (Character.isDigit(chars[i])) {  // 遍历判断数组中的对应下标元素是否为数字
                    num++;
                } else if (Character.isSpaceChar(chars[i])) { // 遍历判断数组中的对应下标元素是否为空格
                    space++;
                } else {   // 即如果以上都不是 归纳为其他字符
                    other++;
                }
            }
            // 最后打印所有的字符个数
            System.out.println("字母的个数:" + english);
            System.out.println("空格的个数:" + space);
            System.out.println("数字的个数:" + num);
            System.out.println("其他字符的个数:" + other);
        }
    }
    
    打印结果:
    请输入任意字符:
    jksjo3i2 o'ipsoi2 [ ]o o ]2o  so 4 ] o]4o44498889 783 o]o]oio ]]lks.k [k; j['
    字母的个数:30
    空格的个数:15
    数字的个数:17
    其他字符的个数:15
    

    5.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加), 几个数相加由键盘控制

    package com.company.practice;
    
    import java.util.Scanner;
    
    /**
     * 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),
     * 几个数相加由键盘控制
     */
    public class Test05 {
        public