《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("\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);
    }
}

運行結果:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM