JAVA 基础编程练习500题

本文列举了50个JAVA编程基础练习题目,涵盖数列、素数判断、水仙花数、质因数分解、条件运算、最大公约数与最小公倍数计算、字符统计、循环和递归等概念,旨在帮助初学者巩固和提高JAVA编程技能。
摘要由CSDN通过智能技术生成

【程序 1】 
题目: 古典问题: 有一对兔子, 从出生后第 3 个月 起每个月 都生一对兔子, 小兔子长到第三个月 后每个月 又生一对兔子, 假如兔子都不死, 问每个月 的兔子对数为多少? 
程序分析: 兔子的规律为数列1,1,2,3,5,8, 13, 21.... 做这种题目, 最好的做法就是找出规律, 跟高中的数列一样 
本题有: a[n]=a[n-1]+a[n-1],而第一第二项都知道了, 后面的值也可以求得

public class Programme1 {
        public static void main(String[] args) {
            System. out.print("请输入你想知道的兔子数量的月 份: ");
            Scanner scanner=new Scanner(System.in);
            int n=scanner.nextInt();//获取输入的整数
            System. out.println("第"+n+"个月 兔子总数为"+fun(n));
            scanner.close();
        }
        //求得所需月 份的兔子的数量, 返回值为兔子的数量
        private static int fun(int n){
            if(n==1 | | n==2)
            return 1;
else
            return fun(n-1)+fun(n-2);
        }
    }

【程序 2】
    题目: 判断 101-200 之间有多少个素数, 并输出所有素数。
    程序分析:
            * 素数是: 只能被1或本身整除的数, 如: 3, 5, 7, 11, 131. . .
           *判断素数的方法: 用一个数分别去除2到sqrt(这个数) ,
            *其实用这个数分别去除2到他本身少1的数也可以, 但是运算时间增加了
            *如果能被整除, 则表明此数不是素数, 反之是素数。
    

public class Programme2 {
        public static void main(String[] args) {
            int sum=0;
            for (int i = 100; i < 200; i++) {
                if (IsRightNum(i)) { //判断这个数是不是素数
                    System. out.print(i+" ");
                    sum++;
                    if (sum%10==0) { //十个一行
                        System. out.println();
                    }
                }
            }
            System.out.println("素数的整数: "+sum);
        }
        //判断这个数是不是素数的具体代码
        private static boolean IsRightNum(int i) {
            for (int j = 2; j < Math.sqrt(i); j++) {
                if (i%j==0) { //如果能整除, 就说明不是素数, 可以马上中断, 继续对
                    下一个数判断
                    return false;
                }
            }
            return true;
        }
    }


【程序 3】
    题目: 打印出所有的"水仙花数", 所谓"水仙花数"是指一个三位数, 其各位数字立方和等于该数本身。

   例如: 153 是一个"水仙花数", 因为 153=1 的三次方+5 的三次方+3 的三次方。
    程序分析: 利用 for 循环控制 100-999 个数, 每个数分解出个位, 十位, 百位。
    

public class Programme3 {
        public static void main(String[] args) {
            int sum=0;//水仙花的总数
            for (int i = 100; i < 1000; i++) {
                int bite=i%10; //求得个位
                int ten=i/10%10; //求得十位
                int hundred=i/100;//求得百位
//如果符合水仙花条件的数打印出来
                if (i==(bite*bite*bite)+
                        (ten*ten*ten)+(hundred*hundred*hundred)) {
                    System. out.print(i+" ");
                    sum++;
                }
            }
            System. out.println("总共有水仙花个数: "+sum);
        }
    }


【程序 4】
    题目: 将一个正整数分解质因数。 例如: 输入 90, 打印出 90=2*3*3*5。
    程序分析: 对 n 进行分解质因数, 应先找到一个最小的质数 k, 然后按下述步骤完成:
            (1) 如果这个质数恰等于 n, 则说明分解质因数的过程已经结束, 打印出即可。
            (2) 如果 n<>k, 但 n 能被 k 整除, 则应打印出 k 的值, 并用 n 除以 k 的商, 作为新的正整数 n, 重复执行第一 步。
            (3) 如果 n 不能被 k 整除, 则用 k+1 作为 k 的值, 重复执行第一步。
    

public class Programme4 {
        public static void main(String[] args) {
            System. out.print("请输入一个你要分解的正整数: ");
            Scanner scanner=new Scanner(System.in);
            int input=scanner.nextInt();//获取输入的数字
            System. out.println();
            System. out.print(input+"=");
            for (int i = 2; i < input+1; i++) {
                while(input%i==0&&input! =i) {
                    input=input/i;
                    System. out.print(i+"*");
                }
                if(input==i){ //上面的都不能整除, 说明这是一个质数
                    System. out.print(i);
                    break;
                }
            }
            scanner.close();
        }
    }


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

public class Programme5 {
        public static void main(String[] args) {
            System. out.println("请输入你的分数: ");
            Scanner scanner=new Scanner(System.in);
            int input=scanner.nextInt();//获取输入
//等级判断
            String belong=input>=90?"A":(input>=60?"B":"c");
            System. out.println(input+"分属于: "+belong);
            scanner.close();
        }
    }


【程序 6】
    题目: 输入两个正整数 m 和 n, 求其最大公约数和最小公倍数。
    程序分析: 利用辗除法。
  *这里有一个知识点要记住的, 最大公约数和最小公倍数的求法
*1、 先求最大公约数bigDivisor
*2、 就可以很方便获得最小公倍数multiple=input1*input2/bigDIvisor
*这里最重要的就是求最大公约数: 求法如下
*(1)用大的数对小的数求余
*(2)把小的数赋值给大的数, 把求余获得的结果赋值给小的数,
 *(3)循环上一步的操作, 直到求余的结果为零
*(4)上一步被求余的数就是我们要的最大公约数, 不信的话, 你可以动手试试
   

 public class Programme6 {
        public static void main(String[] args) {
            int bigDivisor=0;//定义最大公约数
            int multiple=0;//定义最小公倍数
            System. out.println("请输入两个整数: ");
            Scanner scanner = new Scanner(System.in);
            int input1 = scanner.nextInt();// 获取第一个数
            int input2 = scanner.nextInt();// 获取第二个数
            multiple=input1*input2;//这个值保存, 求公约数后, 方便求得最小公倍数
            int temp =1;// 交换用的中间数
            if (input2 > input1) {//确保第一个数不小于第二个数
                temp=input1;
                input1=input2;
                input2=temp;
            }
            while (temp! =0) { //求余结果不等于零, 就一直循环
                temp=input1%input2;//求余结果
                input1=input2;//大的数已经没用了, 用小的数替代
                input2=temp;//把求余的结果赋值给小的数
            }
            bigDivisor=input1;//最后一次求余结果为零时, 被求余的数
            multiple=multiple/bigDivisor;
            System. out.println("最大公约数是: "+bigDivisor );
            System. out.println("最小公倍数是: "+multiple);
            scanner.close();
        }
    }


【程序 7】
    题目: 输入一行字符, 分别统计出其英文字母、 空格、 数字和其它字符的个数。
    程序分析:
    这里的需要的知识点:
1、 获取一行字符串, nextLine()
 2、 把字符串的每一个字符赋值到一个数值中
3、 对比每一个数值在ASK码的范围, 就可以确定它符号的类别
4、 char字符ASK码的范围
(1) 数字0到9: 48~57
(2) 字母A到Z: 65到90 a到z: 97到122
(3) 空格是 32

public class Programme7 {
        public static void main(String[] args) {
            int num=0;//数字的个数
            int letter=0;//字母的个数
            int space=0;//空格的个数
            int others=0;//其他的个数
            System. out.println("请输入一串字符: ");
            Scanner scanner=new Scanner(System.in);
            String string=scanner.nextLine();//获取一行字符串
//把字符串里面的值赋值给一个字符型数组
            char[] arr=string.toCharArray();
//遍历字符串里面的所有值
            for (int i = 0; i < arr.length; i++) {
                if (arr[i]>=48&&arr[i]<=57) {//字符是数字
                    num++;
                } else if((arr[i]>=65&&arr[i]<=90)| | (arr[i]>=97&&arr[i]<=122)) {
                    letter++;
                }else if (arr[i]==32) {
                    space++;
                }else {
                    others++;
                }
            }
            System. out.println("数字: "+num+"个, 字母: "+letter+"个, 空格:"+space+"个, 其他: "+others+"个");
            scanner.close();
        }
    }


【程序 8】
    题目: 求 s=a+aa+aaa+aaaa+aa. . . a 的值, 其中 a 是一个数字。 例如 2+22+222+2222+22222(此时共有 5 个
    数相加) , 几个数相加有键盘控制。 输出结果的形式如: 2+22+222=246;
    程序分析: 关键是计算出每一项的值。
    比如获取的数字为: a, 出现的项数为: n
    总结一下, 可以得到一下规律:
    1、 第一项有一个a, 最后一项有n个a
    2、 第 1 和第 2 项相差 2*10, 第 2 和第三项相差 2*100, 第 k 和第 k+1 项相差 2*(10 的 k 次方)
    

public class Programme8 {
        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);//完美结束
        }
    }


【程序 9】
    题目: 一个数如果恰好等于它的因子之和, 这个数就称为"完数"。 例如 6=1+2+3. 编程找出 1000 以内的
    所有完数。
    判断完数的方法:
            * 利用for循环判断所有因数的和是否和输入的值是否相等, 相等的话输出
* 求因数的方法:
  * (1) 两个嵌套循环, 并用i%j==0, 关于i和j的值范围: i从1到1000逐个遍历, j只需不大于i/2+1 即可。比如: 48, 最大的因数才24, 99最大的因数是33, 因数不会大于本身数的一半
* (2) j就是我们所求的因数, 把所有的j相加, 就可以得到因数总和
* (3) 因数总和已经包含 1 了, 因为第一次就保存 1 了
    

public class Programme9 {
        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=sum+j;
                        if (i==sum) {
                            System. out.print(i+" ");
                        }
                    }
                }
            }
        }
    }


【程序 10】
    题目: 一球从h米高度自由落下, 每次落地后反跳回原高度的一半;
    再落下, 求它在 第n次落地时, 共经过多少米? 第n次反弹多高?
    程序分析: 反弹的高度: (1/2) 的n次方*h
 * 经过的距离: 这个可以总结得到: 第一次落地经过: h, 第二次落地经过: h+(h/2) *2,
 * 第三次落地经过: h+(h/2) *2+(h/2/2) *2
 * 那么第 n 次落地经过: h+(h/2) *2+(h/2/2) *2 +. . . +h/(2 的 n-1 次方) *2
  

pub
  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值