《Java练习题》Java习题集

程序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("\n");
        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);
    }
}

 

运行结果:

一时没有看懂也不要灰心,毕竟我也是用了不少的时间才弄懂的。不懂的话可以多看几遍,或者可以加下小编的V:K15197783918,和小伙们一起交流。

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务