50道经典的java程序题

本文列举并解析了50道经典的Java编程题目,涵盖递归、算法、数学逻辑等多个方面,旨在帮助读者提升编程技能。题目包括:兔子繁殖问题、素数判断、水仙花数、分解质因数、最大公约数和最小公倍数计算、字符统计、完数查找、反弹高度计算、数字排序、菱形图案、回文数判断、数组操作、字符串处理和杨辉三角形等。

程序一

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
本题需要用到递归思想,而这题的核心是:a[n]=a[n-1]+a[n-1]
代码如下:

package code.test;
import java.util.*;
class test01 {
   
   
    public static void main(String[] args) {
   
   
        System.out.println("请输入兔子数量的月份");
        Scanner sc=new Scanner(System.in);
        int month=sc.nextInt();
        System.out.println("第" + month + "个月兔子总数为" + clacRabbitNum(month));

    }
    //定义方法
    public static int clacRabbitNum(int month){
   
   
        if(month==1||month==2){
   
   
            return 1;
        }else{
   
   
            return clacRabbitNum(month-1)+clacRabbitNum(month-2);
        }
    }
}

程序二

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

package code.test;
//题目:判断101-200之间有多少个素数,并输出所有素数。
public class test02 {
   
   

    public static void main(String[] args) {
   
   
        int sum = 0;
        for (int i = 100; i < 200; i++) {
   
   
            if (prime(i)) {
   
    //判断这个数是不是素数
                System.out.print(i + "   ");
                sum++;
                if (sum % 5 == 0) {
   
    //被五整出换行
                    System.out.println();
                }
            }
        }
        System.out.println();
        System.out.println("素数的个数:" + sum);
    }

    //判断这个数是不是素数的代码
    private static boolean prime(int i) {
   
   
        for (int j = 2; j <=Math.sqrt(i); j++) {
   
   
            if (i % j == 0) {
   
   
                //如果能整除,就说明不是素数,可以马上中断,继续对下一个数判断
                return false;
            }
        }
        return true;
    }
}

程序三

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

package code.test;

public class test03 {
   
   
    public static void main(String[] args) {
   
   
        int Sum=0;
        for (int i = 100; i < 1000; i++) {
   
   
            if (sum(i)){
   
   
                System.out.print(i + " ");
            Sum++;
            }
        }

        System.out.println();
        System.out.println("是水仙花的个数为:"+Sum);
    }

    //判断水仙花数
    private static boolean sum(int j) {
   
   
        int a=j/100;            //确定百位数字
        int b=(j%100)/10;       //十位数字
        int c=j%10;             //个位数字
        int d= a*a*a+b*b*b+c*c*c;
        if ( d == j)
            return true;
        else
            return false;
    }
}

程序四

题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

package code.test;
import java.util.Scanner;

public class test04 {
   
   
    public static void main(String[] args){
   
   
        Scanner sc = new Scanner(System.in);
        System.out.println("输入一个正整数:");
        int num = sc.nextInt();
        System.out.print(num + "=");
        int flag = 0;
        for ( int i = 2; i <= num; i++) {
   
   
            if ( judgePrimeNumber(i) && num % i == 0 ) {
   
   
                flag++;
                if ( flag == 1) {
   
   
                    System.out.print(i);
                }else {
   
   
                    System.out.print("*"+i);
                }
                num /= i;
                i--;
            }
        }
    }

    public static boolean judgePrimeNumber(int num) {
   
   
        //写一个方法判断num能否被i整除
        for ( int i = 2; i <= Math.sqrt(num); i++ ) {
   
   
            if ( num % i == 0 ) {
   
   
                return false;
            }
        }
        return true;
    }
}

程序五

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
(a>b)?a:b这是条件运算符的基本内容。

package code.test;
import java.util.*;
public class test05 {
   
   
    public static void main(String[] args) {
   
   

                Scanner sc=new Scanner(System.in);
                System.out.print("请输入学习成绩分数:");
                int grade=sc.nextInt();
                gradeNu(grade);
            }

            private static void gradeNu(int n){
   
   
                if(n<0||n>100){
   
   
                    System.out.println("输入无效成绩");
                }else {
   
   
                    String s=(n>=90)?"分属于A等":((n>=60)?"分属于B等":"分属于C等");
                    System.out.println(n+s);
                }
            }
}


程序六

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
本题就是用辗转相除法求最大公约数:
(1)用大的数对小的数求余
(2)把小的数赋值给大的数,把求余获得的结果赋值给小的数
(3)循环上一步的操作,直到求余的结果为零
(4)上一步被求余的数就是我们要的最大公约数
然后两数相乘再除以最大公约数就是最小公倍数

package code.test;
import java.util.*;
public class test06 {
   
   
    public static void main(String[] args) {
   
   
        int m, n;
        Scanner sc = new Scanner(System.in);
        System.out.println("输入两个正整数:");
        m = sc.nextInt();
        n = sc.nextInt();
        //求最大公约数的方法
        int x=PCM(m,n);
        System.out.println("最大公约数为:"+x);
        //求最小公倍数,最小公倍数就是两个数的乘积除以最大公约数
        int y=m*n/x;
        System.out.println("最小公倍数为:"+y);
    }
    //用辗转法求最大公约数
    public static int PCM(int a, int b) {
   
   
        if (a < b) {
   
   
            int temp = a;
            a = b;
            b = temp;
            while (b != 0) {
   
   
                if (a == b) {
   
   

                } else {
   
   
                    int k = a % b;
                    a = b;
                    b = k;
                }
            }
        }
        return a;
    }
}

程序七

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

package code.test;
import java.util.*;
public class test07 {
   
   
    public static void main(String[] args) {
   
   
        int letter=0;
        int number=0;
        int space=0;
        int other=0;

        Scanner scan=new Scanner(System.in);
        System.out.println("输入数据:");
        String str=scan.nextLine();
        char[] ch = str.toCharArray();
                for(int i=0;i<ch.length;i++){
   
   

                    if(Character.isLetter(ch[i])){
   
   
                        //判断是否字母
                        letter++;
                    }
                    else if(Character.isDigit(ch[i])){
   
   
                        //判断是否数字
                        number++;
                    }
                    else if(Character.isSpaceChar(ch[i])){
   
   
                        //判断是否空格键
                        space++;
                    }
                    else{
   
   
                        //以上都不是则认为是其他字符
                        other++;
                    }

                }
                System.out.println("字母个数:"+letter);
                System.out.println("数字个数:"+number);
                System.out.println("空格个数:"+space);
                System.out.println("其他字符个数:"+other);

            }
}

程序八

题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
首先确定a的值,然后有n个a,最后考虑第1和第2项相差210,第2和第三项相差2100,第k和第k+1项相差2*(10的k次方)

package code.test;
import java.util.*;
public class test08 {
   
   
    public
    static void main(String[] args) {
   
   
        int n = 0, a = 0;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入a的值:");
        a = scanner.nextInt();
        System.out.println("请输入n的值:");
        n = scanner.nextInt();
        int[]
                arr = new
                int[n];//创建数组长度为输入的项数
        int
                i = 1;//while循环初始化的值
        arr[0] = a;//数组的第一个值为3
        //把每一项的值赋值给数组里面的数
        while (i < n) {
   
   
            a *= 10;
            arr[i] = a + arr[i - 1];
            i++;
        }
        //求和
        int
                sum = 0;
        for (int s:arr) {
   
   
            sum += s;//累加求和
            if (s == arr[n - 1]) {
   
   
                System.out.print(s);
                break;//最后一次只输出结果
            }
            System.out.print(s + "+");//前面的值输出结果,后面还要加一个加号
        }
        System.out.println("=" + sum);
    }
}

程序九

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

package code.test;

public class test09 {
   
   
    public
    static void main(String[] args) {
   
   
        System.out.println("1000以内的因数有:");
        for (int i = 1; i <=1000;i++) {
   
   
            int sum=0;//所有因数的总和
            for (int j = 1; j < i/2+1; j++) {
   
   
                if (i%j==0) {
   
   //判断范围内的所有j相加,就是因数总和
                    sum+=j;
                }
            }
            if (i==sum) {
   
   
                    System.out.print(i+"  ");
            }
        }
    }

}

程序十

题目:一球从h米高度自由落下,每次落地后反跳回原高度的一半;
再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?
注意第n次反弹的高度:(1/2)的n次方*h
然后第n次落地经过: h+(h/2)*2+(h/2/2)*2 +…+h/(2的n-1次方)*2

package code.test;
import java.util.*;
public class test10 {
   
   
    public static void main(String[] args) {
   
   

        System.out.println("请输入小球下落的高度和落地的次数:");
        Scanner scanner
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值