1、统计字符串次数

package com.zcl.Demo3;

import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        /*
        需求:
            判断键盘录入的字符串有多少个大写、小写、数字
        思路:
            声明三个记录不同字符的变量
            大写(CH>='A'&&CH<='Z')
            小写(ch>='a'&&ch<='z')
            数字(ch>='0'&&ch<='9')
            每执行条件一次就会对变量加1
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入判断字符内容");
        String line = sc.nextLine();

        int small = 0; // 小写
        int max = 0; // 大写
        int sum = 0; // 数字

        // 遍历字符串
        for(int i = 0; i<line.length();i++){
            char ch = line.charAt(i);
            // 判断字符类型
            if(ch>='A'&&ch<='Z'){
                small++;
            }else if(ch>='a'&&ch<='z'){
                max++;
            }else if(ch>='0'&&ch<='9'){
                sum++;
            }
        }
        // 输出变量数
        System.out.println("字符中包含小写字母有:"+small+"个");
        System.out.println("字符中包含大写字母有:"+max+"个");
        System.out.println("字符中包含数字有:"+sum+"个");

    }
}

2、打印水仙花数

package com.zcl.Demo3;

public class Demo3 {
    public static void main(String[] args) {
        /*
        需求:
            打印数水仙花数
            水仙花数是一个三位数,个位、十位、百位的数字立方和等于原数
        思路:
            三位数的个位如何求:
                371 个位 1就是原始数字对10进行取余运算的结果 371%10=1
             三位数的百位数字如何获得
                371 百位3 就是原始数字除于100的结果(整除) 371/100 = 3
             三位数的十位数字如何获取到
                371 十位7 就是通过除于10,可以将7移到个位上(整除) 371/10=37
                37通过对10进行取余运算可以得到最后一位的值7 371/10%10=7
              个位上的值如何取到
                    先使用整除操作将要求数字移到到个位上,再使用取余操作取出最后一位上的值
                    123456789 先整除10000得到12345,再对10区域得到5

         分析:
            输出所有的水仙花数,使用到循环,遍历所有的三位数,100开始到999结束
            不是所有的三位数都是水仙花数,需要判断满足的数字才能进行输出
            判定条件是将三位数中的每一位值取出来,计算立方和与原始数字进行比较是否相等
            在计算之前获得三位数中每个位上的值
         */

        // 遍历三位数
        for(int i=100;i<1000;i++){
            // 计算之前获取到三位数中每个位上的值
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/10/10%10;
            // 判断条件是将三位数中的每一位数值取出来,计算立方和与原始数字进行比较是否相等
            if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
                // 输出水仙花数
                System.out.println("水仙花数位:"+i);
            }

        }
    }
}

3、逢七过

package com.zcl.Demo3;

public class Demo4 {
    public static void main(String[] args) {
         /*
         需求:
             规则:从任意一个数字开始报数,当报到7或者7的倍数时就要过
             打印1-1000的逢七过数据
         思路:
            数据在1-100之间,用for循环实现
            根据规则,用if语句实现数据的判断:要么个位是7, 要么十位是7,要么被7整除
            x%10==7  x/10%10==7 x%7==0
          */

        for(int x = 1; x<=100;x++){
            if(x%10==7||x/10%10==7||x%7==0){
                System.out.println("逢七过的数字有:"+x);
            }
        }
    }
}

4、不死神兔

package com.zcl.Demo3;

public class Demo5 {
    public static void main(String[] args) {
        /*
        需求:
            有一对兔子,从出生三个月起每一个月都生一个兔子,小兔子长到三个月后每个月
            又生一对兔子,加入兔子不死,问第二十个月的兔子对数有多少
        规律:
            一:1
            二:1
            三:2   从第三个数据开始,每一个数据是前面两个数据之和,第一和第二是已知的
            四:3
            五:5   arr[0]=1 arr[1]=1 arr[2]=arr[0]+arr[1]

        思路:
            为了存储多个月的兔子对数,定义一个数组,用动态初始化完成数组元素的初始化,长度为20
            因为第一、二个月的兔子对数是已知的都是1,所以第一、二数组元素值也是1
            用循环实现计算每一个月兔子的对数
            输出数组中最后一个元素的值,就是第20个月的兔子对数
         */

        // 定义数组的长度
        int[] arr = new int[20];
        // 第一、二个月的个数已知为1
        arr[0]=1;
        arr[1]=1;
        // 循环计算每个月的个数
        for(int x=2;x<arr.length;x++){
            /*
            arr[2]=arr[2-2]+arr[2-1]
            arr[3]=arr[3-2]+arr[3-1]
            arr[4]=arr[4-2]+arr[4-1]
             */
            arr[x]=arr[x-2]+arr[x-1];
        }
        // 输出第20个月的兔子对数
        System.out.println("第二十个月的兔子对数为:"+arr[19]); // 6765
    }
}

5、百钱百鸡

package com.zcl.Demo3;

public class Demo6 {
    public static void main(String[] args) {
        /*
        需求:
            鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,百钱买百鸡,问鸡翁、鸡母,鸡雏各几何
        分析:
            假设鸡翁x只,鸡母y只,鸡雏z只,则下面的成立
            x+y+z=100
            5*x+3*y+z/3=100

            如果是单独的鸡型
            0<=x<=20
            0<=y<=33
            0<=z<=100

        思路:
            第一层循环,用户表示鸡翁的范围,初始化表达式的变量定义为x=0,判断条件是x<=20
            第二层循环,用户表示鸡母的范围,初始化表达式的变量定义为y=0,判断条件是y<=33
            这个时候,用于表示鸡雏的变量z=100-x-y
            判断表达式z%3==0和表达式5*x+3*y+z/3=100是否成立,如果成立,输出对应的x,y,z值
            就是对应的鸡翁、鸡母、鸡雏的值
         */
        for(int x = 0;x<=20;x++){
            for(int y=0;y<=33;y++){
                int z = 100-x-y;
                if(z%3==0&&5*x+3*y+z/3==100){
                    System.out.println("鸡翁有:"+x+",鸡母有:"+y+",鸡雏有:"+z);
                }
            }
            /*
            鸡翁有:0,鸡母有:25,鸡雏有:75
            鸡翁有:4,鸡母有:18,鸡雏有:78
            鸡翁有:8,鸡母有:11,鸡雏有:81
            鸡翁有:12,鸡母有:4,鸡雏有:84
             */
        }
    }
}