zoukankan      html  css  js  c++  java
  • 《Java练习题》Java习题集一

    编程合集: https://www.cnblogs.com/jssj/p/12002760.html

    Java总结:https://www.cnblogs.com/jssj/p/11146205.html

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

    import java.util.Scanner;
    
    /**
     * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
     * 分析 一月 1对, 2月 1对,3月 2对,4月 3对,5月5对,6月8对,7月13对,8月 21只
     */
    public class Subject1 {
    
        public static void main(String[] args) {
            System.out.print("请输入你想知道的兔子数量的月份:");
    
            Scanner scanner=new Scanner(System.in);
    
            int n=scanner.nextInt();//获取输入的整数
    
            System.out.println(test(n));
    
            System.out.println(fun(n));
    
            scanner.close();
        }
    
        /**
         * 菜鸟写法
         * @param i
         * @return
         */
        public static int test(int i){
            int tot = 0;
            int a = 0;
            int b = 1;
            for(int j = 0;j<i; j++){
                tot = a+b;
                a = b;
                b = tot;
            }
            return a;
        }
    
        /**
         * 大神写法
         * @param
         * @return
         */
        private static int fun(int n){
            if(n==1 ||n==2)
                return 1;
            else
                return fun(n-1)+fun(n-2);
        }
    }

    运行结果:

    【程序2】
    题目:判断101-200之间有多少个素数,并输出所有素数。

    /**
    * 【程序2】
    * 题目:判断101-200之间有多少个素数,并输出所有素数。
    *
    * 分析:什么是素数,不能被自己和1整除的数。
    */
    public class Subject2 {
    public static void main(String[] args) {
    getPrimeNumber(101,200);
    }

    /**
    * 判断a和b之间有多少个素数
    * @param a
    * @param b
    */
    public static void getPrimeNumber(int a,int b){
    int sum = 0;
    if(a >= b){
    System.out.println("a不能大于等于b!");
    }
    System.out.print("素数:");
    for(int i=a;i<=b;i++){
    if(isPrimeNumber(i)){
    sum += 1;
    System.out.print(i+" ");
    }
    }
    System.out.println();
    System.out.println("存在素数数量:"+sum);
    }

    /**
    * 判断num是否是一个素数
    * @param i
    * @return
    */
    private static boolean isPrimeNumber(int i) {
    boolean flag = true;
    for(int j=2;j <= i/2;j++){
    if(i%j == 0){
    flag = false;
    break;
    }
    }
    return flag;
    }
    }

    运行结果:

    【程序3】
    题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

    /***
     * 【程序3】
     * 题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
     */
    public class Subject3 {
        public static void main(String[] args) {
            for(int i= 100 ; i<=999;i++){
                if(isNarcissus(i)){
                    System.out.println("水仙花数:"+i);
                }
            }
        }
    
        public static boolean  isNarcissus(int a){
    
            int num1 = 0;  //个位
            int num2 = 0;  //十位
            int num3 = 0;  //百位
            num3 = a/100;
            num2 = (a - num3*100)/10;
            num1 = a - num3*100 - num2*10;
    
            if(Math.pow(num1,3) + Math.pow(num2,3) + Math.pow(num3,3) ==a){
                return true;
            }
            return false;
        }
    }

    运行结果:

    【程序4】
    题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    /**
     * 【程序4】
     * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
     */
    public class Subject4 {
        public static void main(String[] args) {
            System.out.print("请输入需要分解因数的整数:");
            Scanner scanner=new Scanner(System.in);
            int a = scanner.nextInt();//获取输入的整数
            decompose(a);
        }
    
        /**
         * 分解质因数
         * @param num
         * @return
         */
        public static void decompose(int num){
            int tmp = num/2;
            for(int i=2;i <= tmp ;i++){
                if(num%i == 0){
                    num = num/i;
                    System.out.println("质因数为:"+i);
                    i=1;
                    continue;
                }
            }
        }
    }

    运行结果:

    【程序5】
    题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

    /**
     * 【程序5】
     * 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
     */
    public class Subject5 {
        public static void main(String[] args) {
            System.out.println("请输入学生成绩:");
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            String result = a>=90? "A" :  (60<=a && a<90? "B" :"C");
            System.out.println("该学生的最终评级为:"+result);
        }
    }

    运行结果:

    【程序6】
    题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

    import java.util.Scanner;
    
    /**
     * 【程序6】
     * 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
     */
    public class Subject6 {
        public static void main(String[] args) {
            System.out.println("请输入第一个正整数:");
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            System.out.println("请输入第二个正整数:");
            int b = scanner.nextInt();
            int maxCommonDivisor = maxCommonDivisor(a,b);
            System.out.println("最大公约数:"+ maxCommonDivisor);
            int minCommonMultiple = (a*b)/maxCommonDivisor;
            System.out.println("最小公倍数:"+ minCommonMultiple);
            scanner.close();
        }
    
        /**
         * 获取num1和num2的最大公约数
         * @param num1
         * @param num2
         * @return
         */
        public static int maxCommonDivisor(int num1,int num2){
            int result = 1;
            int tmp = num1>num2? num2 :num1;
            for (int i = 2; i <= tmp; i++) {
                if(num1%i == 0 && num2%i == 0){
                    result = i*result;
                    num1 = num1/i;
                    num2 = num2/i;
                    i=1;
                }
            }
            return result;
        }
    }

    运行结果:

    【程序7】
    题目:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。

    import java.util.Scanner;
    
    /**
     * 【程序7】
     * 题目:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。
     */
    public class Subject7 {
        public static void main(String[] args) {
            System.out.println("请输入字符串:" );
            Scanner scanner=new Scanner(System.in);
            scanner.useDelimiter("
    ");
            String tmpStr = scanner.next();
            classify(tmpStr);
        }
    
        public static void classify(String str){
            char[] strArr = str.toCharArray();
            int num1 = 0;  //字母
            String num1Str = "";
            int num2 = 0;  //数字
            String num2Str = "";
            int space = 0; //空格
            String spaceStr = "";
            int other = 0; //其他
            String otherStr = "";
            for (int i = 0; i < strArr.length ; i++) {
                int ascii = (int)strArr[i];
                if( 48<= ascii && ascii <= 57){
                    num2 = num2 + 1;
                    num2Str = num2Str +strArr[i] +" ";
                }else if(ascii == 32){
                    space = space +1;
                }else if((65<= ascii && ascii <= 90) || (97 <= ascii && ascii <=  122)){
                    num1 = num1 + 1;
                    num1Str = num1Str +strArr[i] +" ";
                }else{
                    other = other + 1;
                    otherStr = otherStr +strArr[i] +" ";
                }
            }
            System.out.println("存在字母个数:" + num1);
            System.out.println("存在字母如下:" + num1Str);
    
            System.out.println("存在数字个数:" + num2);
            System.out.println("存在数字如下:" + num2Str);
    
            System.out.println("存在空格个数:" + space);
    
            System.out.println("存在其他个数:" + other);
            System.out.println("存在其他如下:" + otherStr);
    
        }
    }

    运行结果:

    【程序8】
    题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246;

    import java.math.BigDecimal;
    import java.util.Scanner;
    
    /**
     * 【程序8】
     * 题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246;
     */
    public class Subject8 {
        public static void main(String[] args) {
            System.out.println("请输入数字1(小于10):" );
            Scanner scanner=new Scanner(System.in);
            int a = scanner.nextInt();
            System.out.println("请输入数字2(1-10):" );
            int b = scanner.nextInt();
            sum(a,b);
        }
    
        /**
         * 求和
         * @param num1
         * @param num2
         */
        public static void sum(int num1,int num2) {
            String numStr = "";
            String result = "";
            BigDecimal bigDecimal = new BigDecimal("0");
            for(int i=0;i< num1; i++ ){
                numStr = numStr+num2;
                if(i==0){
                    result = result+numStr;
                }else{
                    result = result+"+"+numStr;
                }
                bigDecimal = bigDecimal.add(new BigDecimal(numStr));
            }
            result = result +"=" +bigDecimal.toString();
            System.out.println("结果:"+result);
        }
    }

    运行结果:

    【程序9】
    题目:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。

    import java.util.ArrayList;
    import java.util.List;
    
    /***
     * 【程序9】
     * 题目:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
     */
    public class Subject9 {
        public static void main(String[] args) {
            for (int i = 0; i <1000 ; i++) {
                perfectNum(i);
            }
        }
    
        /**
         * 判断是否是完数
         */
        public static void perfectNum(int num){
            List<Integer> list = decompose(num);
            int sum = 0;
            for(int i :list){
                sum = sum + i;
            }
            if(num == sum && num != 1){
                System.out.println("完数:"+num);
            }
        }
    
        /**
         * 分解质因数
         * @param num
         * @return
         */
        public static List decompose(int num){
            List<Integer> list = new ArrayList();
            list.add(1);
            int tmp = num/2;
            for(int i=2;i <= tmp ;i++){
                if(num%i == 0){
                    list.add(i);
                    continue;
                }
            }
            return list;
        }
    }

    运行结果:

    【程序10】
    题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;n次落地经过路线总长度和下次反弹的高度。

    import java.util.Scanner;
    
    /**
     * 【程序10】
     * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;n次落地经过路线总长度和下次反弹的高度。
     */
    public class Subject10 {
    
        public static void main(String[] args) {
            System.out.println("请选择第几次落地:");
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            sumLength(n);
        }
    
        public static void sumLength(int n){
            double height = 100;
            double sumLength = 0;
            for(int i=1; i<=n; i++){
                if(i==1){
                    sumLength = sumLength + height;
                }else{
                    sumLength = sumLength + height*2;
                }
                height = height/2;
            }
            System.out.println("总运动距离为:"+sumLength);
            System.out.println("反弹高度为:"+height);
        }
    }

    运行结果:

    参考:https://blog.csdn.net/zzzzzzzhu/article/details/82355001

  • 相关阅读:
    23种设计模式之责任链模式
    23种设计模式之中介者模式
    23种设计模式之代理模式
    23种设计模式之原型模式
    23种设计模式之模板方法模式
    23种设计模式之建造者模式
    23中设计模式之抽象工厂模式
    批处理产生001到999之间的数字
    批处理随机显示星期几
    批处理简易密码登录
  • 原文地址:https://www.cnblogs.com/jssj/p/11147566.html
Copyright © 2011-2022 走看看