Java编程练习题(涉及循环,函数等)

目录

1. 从控制台输入一个打印的行数,打印如下形状

2. 九九乘法表

3. 输入一个数判断是否质数

4. 请使用循环打印如下图案

5. 输入三边的长度,求三角形的面积和周长(海伦公式)

6. 请输入一个数,判断这个数是偶数还是奇数。

7. 循环输入某同学S1结业考试的5门课成绩,并计算平均分

8. 请从控制台输入一个数,是质数(素数)还是合数

9. 求1~100之间不能被3整除的数之和

10. 根据用户输入的数,打印一个表格

11. 请使用循环完成如下图案的打印

12. 请在控制台上输入两个数,并且输入一个符号(+-*/%),使用switch语句

13. 100~1000返回内,能补5和6整除的数

14. 输入一个年份,判断该年是否是闰年

15. 健康计划:用户输入身高(m),体重(kg),计算BMI,并判断

16. 一个自然数与3的和是5的倍数,与3的差是6的倍数,这个自然数最小是几?

17. 在400-500之间求一个数,它被2除余1,被5除余3,被9除余1,这个数是多少?

18. 有一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被3整除,求这样的四位数中最大的和最小的两数各是几?

19. 编程求一个四位自然数ABCD,它乘以A后变成DCBA

20. 编程求出满足以下条件的三位数:它除以11所得的商等于它各位数字之和

21. 某数被80除所得的商,不但是7的倍数,而且用2,3,4,5,6去除余数都是1,求这个自然数

22. 有一种最简真分数,它们的分子与分母的乘积都是140,把所有这样的真分数从小到大打印出来

23. 一个五位数,若在它的后面写上一个7,得到一个六位数A,若在它前面写上一个7,得到一个六位数B,B是A的五倍,求此五位数.

24. 把123456789这个数乘以一个什么数,能使它的结果不但不含零,而且仍然是 由1,2,3,4,5,6,7,8,9这九个数字组成的,只是顺序不同而已

25. 验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除

26. 如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数"

27. 求水仙花数。ABC  = a^3+b^3+c^3

28. 求 a+aa+aaa+.......+aaaaaaaaa=? 其中a为1至9之中的一个数,项数也要可以指定

29. 求 2/1+3/2+5/3+8/5+13/8.....前20项之和?

30. 求第n项的斐波那契数列的值,f(n) = f(n-1) + f(n-2)

31. 一个人开始上楼梯,假设这个人每一次只能上一个或者两个台阶,当他到达第n个台阶时,问:共有多少种走法?

32. 不死兔子:小明今年高考,考了700,父母,给他买了一对刚刚出生小兔子,四个月后成长为成年兔子,成年后,每过一个月,假设生出一对新的小兔子,问:第n月,小明家共有多少对兔子。


1. 从控制台输入一个打印的行数,打印如下形状

*         1
**        2
***       3
****      4
*****     5
import java.util.Scanner;

public class PrintStar1 {
    public static void main(String[] args) {
        /*
         *		    1
         **		    2
         ***		3
         ****		4
         *****		5
         */
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入要打印的行数:");
        int line = scanner.nextInt();

        for (int i = 0; i < line; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

结果:

2. 九九乘法表

public class NineNine {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }
}

结果:

3. 输入一个数判断是否质数

import java.util.Scanner;

public class PrimeNumber {
    public static void main(String[] args) {
//        输入一个数判断是否质数
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        int num = scan.nextInt();
        int i;
        for (i = 2; i < num; i++) {
            if (num % i == 0){
                System.out.println(num + "不是质数!");
                break;
            }
        }
        if (i == num){
            System.out.println(num + "是质数!");
        }
    }
}

结果:

4. 请使用循环打印如下图案

    *
   ***
  *****
 *******
*********

public class PrintStar2 {
    public static void main(String[] args) {
        /*
                            空格     *
             *              4       1
            ***             3       3
           *****            2       5
          *******           1       7
         *********          0       9
         */
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 5 - i; j++) {
                System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

结果:

5. 输入三边的长度,求三角形的面积和周长(海伦公式)

import java.util.Scanner;

public class Helen {
    public static void main(String[] args) {
//        输入三边的长度,求三角形的面积和周长(海伦公式)
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入三角形三遍长:");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        if (a + b > c && a + c > b && b + c > a){
            int perimeter = a + b + c;
            int p = perimeter / 2;
            double area = Math.pow((p * (p - a) * (p - b) * (p - c)), 0.5);
            System.out.println("三角形的周长:" + perimeter + ",面积:" + area);
        }
    }
}

结果:

6. 请输入一个数,判断这个数是偶数还是奇数。

如果使用偶数,请判断从1到该数是3的倍数有哪些;

如果是奇数,请判断从1到该数是5的倍数有哪些。

import java.util.Scanner;

public class JudgeOddEven {
    public static void main(String[] args) {
        /*
        请输入一个数,判断这个数是偶数还是奇数。
        如果使用偶数,请判断从1到该数是3的倍数有哪些;
        如果是奇数,请判断从1到该数是5的倍数有哪些。
         */
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        int num = scan.nextInt();
        if (num % 2 == 0){
            System.out.println(num + ":是偶数");
            for (int i = 1; i <= num; i++){
                if (i % 3 == 0){
                    System.out.println(i);
                }
            }
        }else {
            System.out.println(num + ":是奇数");
            for (int i = 1; i <= num; i++){
                if (i % 5 == 0){
                    System.out.println(i);
                }
            }
        }
    }
}

结果:

7. 循环输入某同学S1结业考试的5门课成绩,并计算平均分

import java.util.Scanner;

public class AverageScore {
    public static void main(String[] args) {
        /*
        循环输入某同学S1结业考试的5门课成绩,并计算平均分
         */
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入某同学的语文、数学、英语、物理、化学成绩:");
        double chinese = scan.nextDouble();
        double math = scan.nextDouble();
        double english = scan.nextDouble();
        double physical = scan.nextDouble();
        double chemistry = scan.nextDouble();
        double averageScore = (chinese + math + english + physical + chemistry) / 5;
        System.out.println(averageScore);
    }
}

结果:

8. 请从控制台输入一个数,是质数(素数)还是合数

提示:从2开始,只能被1和它本身除尽的数,是质数(素数)

import java.util.Scanner;

public class JudgePrime {
    public static void main(String[] args) {
        /*
        请从控制台输入一个数,是质数(素数)还是合数
        提示:从2开始,只能被1和它本身除尽的数,是质数(素数)
         */
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个自然数(1, 2, 3, ...):");
        int num = scan.nextInt();
        if (num < 2) {
            System.out.println(num + "既不是质数也不是合数!");
        }else {
            int i;
            for (i = 2; i < num; i++) {
                if (num % i == 0) {
                    System.out.println(num + "是合数!");
                    break;
                }
            }
            if (i == num) {
                System.out.println(num + "是质数!");
            }
        }
    }
}

结果:

9. 求1~100之间不能被3整除的数之和

public class SumThree {
    public static void main(String[] args) {
        /*
        求1~100之间不能被3整除的数之和
         */
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 3 != 0) {
                sum += i;
            }
        }
        System.out.println(sum);
    }
}

结果:

10. 根据用户输入的数,打印一个表格

    1    1*1    1*1*1
    2    2*2    2*2*2
    ....

    n    n平方    n立方
import java.util.Scanner;

public class PrintTable {
    public static void main(String[] args) {
        /*
        根据用户输入的数,打印一个表格
            1	1*1	    1*1*1
            2	2*2	    2*2*2
            ....
            n	n平方	n立方
        */
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个正整数:");
        int n = scan.nextInt();
        for (int i = 1; i <= n; i++) {
            System.out.println(i + "\t" + i * i + "\t" + i * i * i);
        }
    }
}

结果:

11. 请使用循环完成如下图案的打印

public class PrintManyStar {
    public static void main(String[] args) {
        // 请使用循环完成如下图案的打印

        /*          行      列
        *           1       1
        **          2       2
        ***         3       3
        ****        4       4
        *****       5       5
        ******      6       6
         */
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j <= i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("------------");
        /*          行  空  列
           *        1   3   1
          ***       2   2   3
         *****      3   1   5
        *******     4   0   7
         */
        for (int i = 1; i <= 4; i++) {
            for (int k = 1; k <= 4 - i; k++){
                System.out.print(" ");
            }
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("----------");
        /*          行  空  列
        *******     1   0   7
         *****      2   1   5
          ***       3   2   3
           *        4   3   1
         */
        for (int i = 1; i <= 4; i++) {
            for (int k = 1; k <= i - 1; k++){
                System.out.print(" ");
            }
            for (int j = 1; j <= 8 - (2 * i -1); j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("----------");
        /*
           *
          ***
         *****
        *******
           *
           *
           *
           *
         */
        for (int i = 1; i <= 8; i++) {
            if (i <= 4) {
                for (int k = 1; k <= 4 - i; k++){
                    System.out.print(" ");
                }
                for (int j = 1; j <= 2 * i - 1; j++) {
                    System.out.print("*");
                }
            }
            else {
                for (int k = 1; k < 4; k++){
                    System.out.print(" ");
                }
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("----------");
        /*          行  空  列
           *        1   3   1
          ***       2   2   3
         *****      3   1   5
        *******     4   0   7
         *****      1   1   5
          ***       2   2   3
           *        3   3   1
         */
        // 上四行
        for (int i = 1; i <= 4; i++) {
            for (int k = 1; k <= 4 - i; k++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        // 下三行
        for (int i = 1; i <= 3; i++) {
            for (int k = 1; k <= i; k++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= 6 - (2 * i -1); j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("------------");
        /*          行  空  列
           *        1   3   "*"
          * *       2   2   "*"+" "*1+"*"
         *   *      3   1   "*"+" "*3+"*"
        *     *     4   0   "*"+" "*5+"*"
         *   *      1   1   "*"+" "*3+"*"
          * *       2   2   "*"+" "*1+"*"
           *        3   3   "*"
         */
        for (int i = 1; i <= 4; i++) {
            for(int k = 1; k <= 4 - i; k++) {
                System.out.print(" ");
            }
            if (i == 1) {
                System.out.print("*");
            }else {
                System.out.print("*");
                for (int j = 1; j <= 2 * i - 1 - 2; j++){
                    System.out.print(" ");
                }
                System.out.print("*");
            }
            System.out.println();
        }
        for (int i = 1; i <= 3; i++) {
            for (int k = 1; k <= i; k++) {
                System.out.print(" ");
            }
            if (i == 3) {
                System.out.print("*");
            }else {
                System.out.print("*");
                for (int j = 1; j <= 4 - 2 * i + 1; j++){
                    System.out.print(" ");
                }
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("------------");
        /*          行  空  列
           *        1   3   1
          ***       2   2   3
         * * *      3   1   *
        *******     4   0   7
         * * *      1   1   *5
          ***       2   2   3
           *        3   3   1
         */
        for (int i = 1; i <= 4; i++) {
            for (int k = 1; k <= 4 - i; k++) {
                System.out.print(" ");
            }
            if (i == 3) {
                System.out.print("* * *");
            }else {
                for (int j = 1; j <= 2 * i - 1; j++) {
                    System.out.print("*");
                }
            }
            System.out.println();
        }
        for (int i = 1; i <= 3; i++) {
            for (int k = 1; k <= i; k++) {
                System.out.print(" ");
            }
            if (i == 1) {
                System.out.print("* * *");
            }else {

                for (int j = 1; j <= 7 - 2 * i; j++) {
                    System.out.print("*");
                }
            }
            System.out.println();
        }
    }
}

结果:

12. 请在控制台上输入两个数,并且输入一个符号(+-*/%),使用switch语句

import java.util.Scanner;

public class Calculator {
    // 请在控制台上输入两个数,并且输入一个符号(+-*/%),使用switch语句
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入两个数:");
        int num1 = scan.nextInt();
        int num2 = scan.nextInt();
        System.out.print("请输入运算符(+-*/%):");
        String operator = scan.next();
        String result = calculator(num1, num2, operator);
//        double a = 7.1;
//        double b = 5.3;
//        System.out.println(a+b);  // 12.399999999999999,精度丢失
        System.out.println(result);
    }

    public static String calculator(int num1, int num2, String operator){
        switch (operator) {
            case "+":
                return num1 + operator + num2 + "=" + (num1 + num2);
            case "-":
                return num1 + operator + num2 + "=" + (num1 - num2);
            case "*":
                return num1 + operator + num2 + "=" + (num1 * num2);
            case "/":
                return num1 + operator + num2 + "=" + (num1 / num2);
            case "%":
                return num1 + operator + num2 + "=" + (num1 % num2);
        }
        return null;
    }
}

结果:

13. 100~1000返回内,能补5和6整除的数

public class DivideFiveSix {
    public static void main(String[] args) {
        // 100~1000返回内,能补5和6整除的数
        divideFiveSix();
    }

    public static void divideFiveSix() {
        int count = 0;
        for (int i = 100; i <= 1000; i++){
            if (i % 5 ==0 && i % 6 == 0) {
                System.out.print(i + "  ");
                count += 1;
            }
        }
        System.out.println();
        System.out.println("能被5和6整除的数有:" + count + "个");
    }
}

结果:

14. 输入一个年份,判断该年是否是闰年

import java.util.Scanner;

public class JudgeLeapYear {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份:");
        int year = scanner.nextInt();
        boolean isLeap = judgeLeapYear(year);
        if (isLeap){
            System.out.println(year + "是闰年");
        }else {
            System.out.println(year + "是平年");
        }
    }

    public static boolean judgeLeapYear(int year) {
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            return true;
        }
        return false;
    }
}

结果:

15. 健康计划:用户输入身高(m),体重(kg),计算BMI,并判断

计算公式:BMI = 体重 / 身高^2
    BMI < 18.5:过轻
    18.5≤ BMI <24:正常
    24 ≤ BMI <27:过重
    27 ≤ BMI < 30:轻度肥胖
    30 ≤ BMI < 35:中度肥胖
    BMI ≥ 35:重度肥胖

import java.util.Scanner;

public class BodyMassIndex {
    /*
    健康计划
	    用户输入身高(m),体重(kg)
	    计算公式:BMI =体重 / 身高^2
	    BMI < 18.5:过轻
	    18.5≤ BMI <24:正常
	    24 ≤ BMI <27:过重
	    27 ≤ BMI < 30:轻度肥胖
	    30 ≤ BMI < 35:中度肥胖
	    BMI ≥ 35:重度肥胖
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入你的身高(m)、体重(kg):");
        float height = scanner.nextFloat();
        float weight = scanner.nextFloat();
        String result = bodyMassIndex(height, weight);
        System.out.println(result);
    }

    public static String bodyMassIndex(float height, float weight) {
        float bMI = weight / (height * height);
        System.out.println(bMI);
        if (bMI < 18.5){
            return "过轻!";
        }else if (bMI < 24) {
            return "正常!";
        }else if (bMI < 30) {
            return "过重!";
        }else if (bMI < 35) {
            return "过度肥胖!";
        }else {
            return "重度肥胖!";
        }
    }
}

结果:

16. 一个自然数与3的和是5的倍数,与3的差是6的倍数,这个自然数最小是几?

public class FindNumber {
    public static void main(String[] args) {
        // 一个自然数与3的和是5的倍数,与3的差是6的倍数,这个自然数最小是几?
        // (num + 3) % 5 == 0 && (num - 3) % 6 == 0
        int result = findNum();
        System.out.println(result);
    }

    public static int findNum() {
        int num = 0;
        for (int i = 0; i < 100; i++){
            if ((i + 3) % 5 == 0 && (i - 3) % 6 == 0) {
                num = i;
                break;
            }
        }
        return num;
    }
}

结果:

17. 在400-500之间求一个数,它被2除余1,被5除余3,被9除余1,这个数是多少?

public class FindNumber1 {
    public static void main(String[] args) {
        int result = findNum1();
        System.out.println(result);
    }

    public static int findNum1() {
        //在400-500之间求一个数,它被2除余1,被5除余3,被9除余1,这个数是多少?
        // i % 2 == 1 && i % 5 == 3 && i % 9 == 1
        int i;
        for (i = 400; i <= 500; i++) {
            if (i % 2 == 1 && i % 5 == 3 && i % 9 == 1) {
                break;
            }
        }
        return i;
    }
}

结果:

18. 有一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被3整除,求这样的四位数中最大的和最小的两数各是几?

public class FindNumber2 {
    public static void main(String[] args) {
        int result1 = findNumMin();
        System.out.println(result1);
        int result2 = findNumMax();
        System.out.println(result2);
    }
    // 有一些四位数,百位数字都是3,十位数字都是6,
    // 并且它们既能被2整除,又能被3整除,
    // 求这样的四位数中最大的和最小的两数各是几?
    public static int findNumMin() {
        int num = 0;
        label:for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                num = i * 1000 + 3 * 100 + 6 * 10 + j;
                if (num % 2 == 0 && num % 3 == 0) {
//                    System.out.println(num);
                    break label;
                }
            }
        }
        return num;
    }
    public static int findNumMax() {
        int num = 0;
        labal:for (int i = 9; i > 0; i--) {
            for (int j = 9; j > 0; j--) {
                num = i * 1000 + 3 * 100 + 6 * 10 + j;
                if (num % 2 == 0 && num % 3 == 0) {
//                    System.out.println(num);
                    break labal;
                }
            }
        }
        return num;
    }
}

结果:

19. 编程求一个四位自然数ABCD,它乘以A后变成DCBA

public class FindNumber3 {
    public static void main(String[] args) {
//        int i = 1024;
//        int qian = i / 1000;
//        int bai = i % 1000 / 100;
//        int shi = i % 1000 % 100 / 10;
//        int ge = i % 1000 % 100 % 10;
//        System.out.println(" " + qian + bai + shi + ge);
        findNum();
    }

    // 编程求一个四位自然数ABCD,它乘以A后变成DCBA
    public static void findNum() {
        int i;
        for (i = 1000; i < 10000; i++) {
            int qian = i / 1000;
            int bai = i % 1000 / 100;
            int shi = i % 1000 % 100 / 10;
            int ge = i % 1000 % 100 % 10;
            int j = ge * 1000 + shi * 100 + bai * 10 + qian;
            if (i * qian == j) {
                System.out.println(i);
            }
        }
    }
}

结果:

20. 编程求出满足以下条件的三位数:它除以11所得的商等于它各位数字之和

public class FindNumber4 {
    // 编程求出满足以下条件的三位数:它除以11所得的商等于它各位数字之和
    public static void main(String[] args) {
        findNum();
    }

    public static void findNum() {
        int num;
        for (num = 100; num < 999; num++) {
            int bai = num / 100;
            int shi = num % 100 / 10;
            int ge = num % 100 % 10;
            int sum = bai + shi + ge;
            if (num / 11 == sum) {
                System.out.println(num);
            }
        }
    }
}

结果:

21. 某数被80除所得的商,不但是7的倍数,而且用2,3,4,5,6去除余数都是1,求这个自然数

public class FindNumber5 {
    // 某数被80除所得的商,不但是7的倍数,而且用2,3,4,5,6去除余数都是1,求这个自然数
    public static void main(String[] args) {
        findNum();
    }

    public static void findNum() {
        int i;
        for (i = 560; i < 10000; i++) {
            int shang = i / 80;
            int yu = i % 80;
            if (shang % 7 == 0 && yu % 2 == 1 && yu % 3 == 1
                    && yu % 4 == 1 && yu % 5 == 1 && yu % 6 == 1) {
                System.out.println(i);
            }
        }
    }
}

结果:

22. 有一种最简真分数,它们的分子与分母的乘积都是140,把所有这样的真分数从小到大打印出来

public class FindNumber6 {
    // 有一种最简真分数,它们的分子与分母的乘积都是140,把所有这样的真分数从小到大打印出来
    public static void main(String[] args) {
        findNum();
    }

    public static void findNum(){
//        for (int i = 1; i <= 140; i++){
//            if (140 % i == 0) {
//                System.out.println(i);
//            }
//        }
        for (int i = 1; i < (int)(Math.sqrt(140)); i++) {
            label:for (int j = (int)(Math.sqrt(140)); j <= 140; j++) {
                if (i * j == 140) {
                    // 去除当中可以进行约分的i、j
                    if (i != 1) {
                        for (int k = 2; k <= i; k++) {
                            if (j % k == 0 && i % k == 0){
                                continue label;
                            }
                        }
                    }
                    System.out.println(i + "/" + j);
                }
            }
        }
    }
}

结果:

23. 一个五位数,若在它的后面写上一个7,得到一个六位数A,若在它前面写上一个7,得到一个六位数B,B是A的五倍,求此五位数.

public class FindNumber7 {
    public static void main(String[] args) {
        findNum();
    }
    // 一个五位数,若在它的后面写上一个7,得到一个六位数A,
    // 若在它前面写上一个7,得到一个六位数B,B是A的五倍,求此五位数
    public static void findNum() {
        int i;
        for (i = 10000; i < 100000; i++) {
            if((7 * 100000 + i) / (i * 10 + 7) == 5 &&(7 * 100000 + i) % (i * 10 + 7) == 0) {
                System.out.println(i);
            }
        }
    }
}

结果:

24. 把123456789这个数乘以一个什么数,能使它的结果不但不含零,而且仍然是 由1,2,3,4,5,6,7,8,9这九个数字组成的,只是顺序不同而已

public class FindNumber8 {
    public static void main(String[] args) {
        findNum();
    }
    //把123456789这个数乘以一个什么数,能使它的结果不但不含零,
    // 而且仍然是由1,2,3,4,5,6,7,8,9这九个数字组成的,只是顺序不同而已
    public static void findNum(){
        int num = 123456789;
        int condition = 999999999 / num;
//        System.out.println(condition);
        for (int i = 2; i < condition; i ++) {
            int result = num * i;
            if (countBits(result) == countBits(num)) {
                System.out.println(result);
            }
        }
//        System.out.println(countBits(1034)); //测试countBits()函数
    }

    public static int countBits(int num){
        int c = num % 10;
        if (num <= 10) {
            return c;
        }
        return c * countBits(num / 10);
    }
}

结果:

25. 验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除

public class VerifyNumber {
    public static void main(String[] args) {
        boolean result = verifyNum();
        if (result) {
            System.out.println("结论正确!");
        } else {
            System.out.println("结论错误!");
        }
//        System.out.println(countBits(10));
    }
    // 验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除
    public static boolean verifyNum(){
        boolean isFlag = true;
        for (int i = 10; i < 100; i++) {
            int result = (i - countBits(i));
            if (result % 9 != 0) {
                System.out.println(i);
                isFlag = false;
                break;
            }else {
                System.out.println(i);
            }
        }
        return isFlag;
    }

    // 计算各位数字之和
    public static int countBits(int num){
        int c = num % 10;
        if (num < 10) {
            return c;
        }
        return c + countBits(num / 10);
    }
}

结果:

26. 如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数"

public class TwinNumber {
    // 如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数"
    public static void main(String[] args) {
        int[] arr = primeNumber();
        System.out.println(Arrays.toString(arr));

        // 冒泡
        for (int i = 0; i < arr.length; i++){
            for (int j = i + 1; j < arr.length; j++)
            if (arr[j] - arr[i] == 2){
                System.out.println("孪生数:" + arr[i] + "+" + arr[j]);
                break;
            }
        }
    }

    // 遍历所有100以内的质数,返回100以内质数的数组
    public static int[] primeNumber(){
        boolean isFlag = true;
        int count = 0;
        int[] arr = new int[100];
        for (int i = 2; i <= 100; i++) {
            for (int j = 2; j < Math.sqrt(i); j++) {
                if (i % j == 0) {
                    isFlag = false;
                    break;
                }
            }if (isFlag) {
//                System.out.println(i);
                arr[count] = i;
                count++;
            }
            isFlag = true;
        }
        int[] arr1 = new int[count];
        for (int i = 0; i < arr1.length; i++) {
            arr1[i] = arr[i];
        }
        return arr1;
    }
}

结果:

27. 求水仙花数。ABC  = a^3+b^3+c^3

public class NarcissisticNumber {
    public static void main(String[] args) {
        narcissisticNum();
    }
    // 求水仙花数 ABC  = a^3+b^3+c^3
    public static void narcissisticNum(){
        for (int i = 100; i < 1000; i++) {
            int a = i / 100;
            int b = i % 100 / 10;
            int c = i % 100 % 10;
            if (i == (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3))){
                System.out.println(i);
            }
        }
    }
}

结果:

28. 求 a+aa+aaa+.......+aaaaaaaaa=? 其中a为1至9之中的一个数,项数也要可以指定

使用递归和循环两种方法:

import java.util.Scanner;

public class RecursionTest {
    //求  a+aa+aaa+.......+aaaaaaaaa=?
    //其中a为1至9之中的一个数,项数也要可以指定。
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入a的值(1-9):");
        int a = scan.nextInt();
        System.out.println("请输入项数:");
        int item = scan.nextInt();
        countSum(a, item);

        // 递归
        int sum = 0;
        for (int i = 1; i <= item; i++){
            int result = countSum1(a, i);
            System.out.println(result);
            sum += result;
        }
        System.out.println(sum);
    }

    // 循环
    public static void countSum(int a, int item){
        int num = 0;
        int sum = 0;
        for (int i = 1; i <= item; i++) {
            num += a * (int)(Math.pow(10, i-1));
            System.out.println(num);
            sum += num;
        }
        System.out.println(sum);
    }

    // 递归
    public static int countSum1(int a, int item){
        if (item == 1){
            return a;
        }
        return countSum1(a,item - 1) + a * (int) (Math.pow(10, item - 1));
    }
}

结果:

29. 求 2/1+3/2+5/3+8/5+13/8.....前20项之和?

public class RecursionTest1 {
    // 求 2/1+3/2+5/3+8/5+13/8.....前20项之和?
    // 分子:2 3 5 8 13
    // 分母:1 2 3 5 8
    public static void main(String[] args) {
        double result = countItem();
        System.out.println("前20项之和:" + result);
    }

    public static double countItem(){
        double sum = 0;
        double a = 2;
        double b = 1;
        for (int i = 1; i < 20; i++) {
            sum += a / b;
            double temp = a;
            a = a + b;
            b = temp;
//            System.out.println(sum);
        }
        return sum;
    }
}

结果:

30. 求第n项的斐波那契数列的值,f(n) = f(n-1) + f(n-2)

使用递归和循环

import java.util.Scanner;

public class RecursionTest1 {
    // 输入一个数n,输出斐波那契数列的第n项值

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入项数:");
        int n = scan.nextInt();

        int result = fibonacci(n);
        System.out.println(result);

        fibonacci1(n);
    }

    public static int fibonacci(int n) {
        if (n == 0) {
            return 0;
        }
        if (n == 1) {
            return 1;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }

    public static void fibonacci1(int n) {
        int frist = 0;
        int second = 1;
        int three = 0;
        for (int i = 2; i <= n; i++) {
            three = frist + second;
            frist = second;
            second = three;
        }
        System.out.println(three);
    }
}

结果:

31. 一个人开始上楼梯,假设这个人每一次只能上一个或者两个台阶,当他到达第n个台阶时,问:共有多少种走法?

import java.util.Scanner;

public class RecursionTest2 {
    // 输入一个上的楼梯数n,输出上楼梯的方法

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入楼梯数:");
        int n = scan.nextInt();

        int result = count(n);
        System.out.println(result);
    }

    public static int count(int n) {
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        return count(n - 1) + count(n - 2);
    }
}

结果:

32. 不死兔子:小明今年高考,考了700,父母,给他买了一对刚刚出生小兔子,四个月后成长为成年兔子,成年后,每过一个月,假设生出一对新的小兔子,问:第n月,小明家共有多少对兔子。

public class UndeadRabbit {
    /*
    不死兔子:小明今年高考,考了700,父母,给他买了一对刚刚出生小兔子,
    四个月后成长为成年兔子,成年后,每过一个月,假设生出一对新的小兔子,
    问:第n月,小明家共有多少对兔子。
    */
     // 1 1 1 1  2 3 4 5  7 10 14 19  26 规律

    public static void main(String[] args) {
        int number = countRabbit(13);
        System.out.println(number);
    }

    public static int countRabbit(int month){
        if (month > 0){
            if (month < 5){
                return 1;
            }
            return countRabbit(month - 1) + countRabbit(month - 4);
        }
        return 0;
    }
}

结果:

  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
内容简介 《Java程序设计习题集》是同作者所编写的清华大学教材《Java程序设计》相配套的习题集。习题集内容覆盖面广,包括:Java言的基本常识、基本语法、面向对象的基本概念、数组、字符串、异常处理、文件和数据流、图形用户界面设计、小应用程序、线程、编程规范、网络程序设计、多媒体民图形学程序设计以及数据库程序设计等。全书共分为习题、参考答案和测试要点与解题说明3个部分。习题包括判断正误、填空题、选择题、简答题、编程题和趣味题等6种题型,并按难易程序分为3 个等级,采用星号注明。本习题集收集了Java程序编写常见问题,并以习题形式总结和归纳Java程序设计知识要点,同时兼顾了SCJP(Sun公司 Java程序员认证考试),从而降低学习难度,减少编写程序出现错误的枘地,也便于掌握各个知识要点或测试对Java程序设计的掌握熟练程度。这些特点有利于初学者在学习过程中少走弯路。对知识点的总结以及内容的全面性也使得《Java程序设计习题集》具有一定的手册特性,非常适合复习,同时也方便教师出题,使得各章节的试题容易在试卷中分布均匀合理。在本习题集中的编程题和趣味题还有可能采用其他计算机语言实现,从而本习题集也有可能成为学习其他计算机语言的实践素材。 编辑推荐 内容全面:习题全面覆盖了Java程序设计(J2SE)的基本知识要点和重要知识要点。以习题的形式对JaVa程序设计方法和常见问题进行了总结与归纳,从而方便复习。   实用性:《Java程序设计习题集》每章都含有一些趣味题,营造了一种轻松而快乐的学习氛围,努力培养和提高学生的学习乐趣,同时也使学生容易产生学习成就感。   趣味性:习题基本上覆盖了程序员在编写Java程序时经常出现的问题Java程序设计知识要点,各习题也列出其测试要点,从而方便教师从中挑选或改编考题以及方便学生进行实战模拟练习或测试,同时也可以为SCJP考试作准备。   简洁性:每道习题者晖力求典型而简洁,这样既方便初学者,也有利于提高学习效率,在较短的时间内测试并领会较多的知识要点。 作者简介 雍俊海1991年到2000年就读于清华大学计算机科学与技术系,获学士。硕士和博士学位,被评为清华大学优秀博士毕业生,博士论文被评为全国优秀博士论文。从2000年3月到2000年6月在香港科技大学计算机系担任访问研究员,从2000年11月到2002年9月在美国肯塔基大学计算机系做博士后,现为清华大学软件学院教师。参与或负责多个国家自然科学基金项目。国家863项目。973项目和美国自然科学基金项目。在2003-2004学年度在清华大学开设了"Java程序设计"课程,获得学生一致好评。根据清华大学2003-2004学年秋季学期教学评估结果,教学成绩在全校名列前茅,在清华大学软件学院所有参评教师中取得教学成绩第一名,在所有讲授Jaya课程的清华大学参评教师中获得教学成绩第一名。因此还获得了清华大学软件学院教学工作优秀奖、大学生研究训练计划(SRT)优秀指导教师一等奖。 目录 第一部分习题 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第二部分 参考答案 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第三部分 测试要点与解题说明 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Golang_HZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值