Java基础算法题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

本文章主要是一些初学者编程算法题,由Java进行编译实现。

1、打印1000-2000年的闰年

普通闰年:公历年份是4的倍数且不是100的倍数为普通闰年(如2004、2020年就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是世界闰年(如2000是世纪闰年,1900不是世纪闰年)。

代码展示:

  public static void main(String[] args) {
        int i = 0;
        for(i=1000;i<=2000;i++){
            if (i%100!=0 && i%4==0 || i%400==0){   //闰年分为普通闰年和世纪闰年,两者满足其一即时闰年。
                System.out.print(i+" ");           //普通闰年能被4整除但不能被100整除
            }                                      //世纪闰年能被400整除
        }
    }

运行结果:

2、判断是否为素数

素数,也称为质数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数。

代码展示:

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        boolean flag = true;           //boolean(布尔型),它的取值只能是常量 true 或 false这两个值中的一个。
        for (int i=2;i < num;i++){     //for循环实现从 2 到 num-1 的数字能否整除num,如果能,num就不是素数,反之。 
            if (num % i == 0){
                flag = false;
                break;
            }
        }
        if (flag==true){   //可以省略==true,在java中if中的判断只有true和false。        
            System.out.println(num+" 是素数");
        } else{
            System.out.println(num+" 不是素数");
        }
    }

运行结果:
请添加图片描述

3、打印1-100之间的素数

代码展示:

 public static void main(String[] args) {
        int i = 0;
        for (i = 1;i <= 100;i++){    //第一个for循环实现1-100的数字
            boolean flag = true;
            int j = 0;
            for (j = 2;j <= i-1;j++){  //第二个for循环实现从2到i-1的数字能否整除i,如果能,就不是素数,反之。
                if (i % j == 0){
                    flag = false;
                    break;
                }
            }
            if (flag==true){
                System.out.print(i+" ");
            }
        }
    }

运行结果:
请添加图片描述

4、水仙花数

“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+125+27=153,则153是一个“水仙花数“。

代码展示:

public static void main(String[] args) {
        for (int i = 100; i < 1000; i++) { //“水仙花数”是一个三位数,所以i从100开始。
            int a = i % 10;           //取出个位上的数
            int b = (i / 10) % 10;    //取出十位上的数
            int c = i / 100;          //取出百位上的数
            int pd = a * a * a + b * b * b + c * c * c;
            if (pd == i) {
                System.out.println(i);
            }
        }
    }

运行结果:
请添加图片描述

5、最大公约数

最大公约数(Greatest Common Divisor(GCD)),也称最大公因数、最大公因子,是一种数学概念,指两个或多个整数共有约数中最大的一个。
最大公约数的求解方法有质因数分解法、短除法、辗转相除法、更相减损法等。

下面分别使用辗转相除法、更相减损数、穷举法来求解最大公约数。
1.辗转相除法

有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余12,15÷12余3,12÷3余0因此,3即为最大公约数

代码展示:

public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = 0;
            while (a%b !=0){
                c = a % b;  
                a = b;    
                b = c;    
            }
            System.out.println(b);
     }

运行结果:
请添加图片描述
2.更相减损数

有两整数a和b:
① 若a>b,则a=a-b
② 若a<b,则b=b-a
③ 若a=b,则a(或b)即为两数的最大公约数
④ 若a≠b,则再回去执行①

代码展示:

public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            while (a != b) {
                if (a > b) {
                    a = a - b;
                } else if (a < b) {
                    b = b - a;
                }
            }
            System.out.println(a);
        }

运行结果:
请添加图片描述

3.穷举法

有两整数a和b:
① i=1
② 若a,b能同时被i整除,则gcd=i
③ i++
④ 若 i <= a(或b),则再回去执行②
⑤ 若 i > a(或b),则t即为最大公约数,结束

代码展示:

public class Chen {
        public static void main(String[] args) {
            Scanner sacnner = new Scanner(System.in);
            int a = sacnner.nextInt();     //输入两个整数
            int b = sacnner.nextInt();     
            int i = 0;
            int gcd = 0;
            for (i = 1;i <= a && i <= b;i++){  //通过for循环判断 i 是否为最大公约数
                if (a%i == 0 && b%i == 0){    //如果i能同时被a和b整除,则说明i也最大公约数
                    gcd = i;
                }
            }
            System.out.println(gcd);
        }

运行结果:
请添加图片描述

6、最小公倍数

最小公倍数与最大公约数的乘积等于那两个数的乘积,所以最小公倍数等于那两个数的的乘积除以最大公约数。

因此求解最小公倍数的问题就变得很简单了。下面是我用辗转相除法来求解的。

代码展示:

public class Chen {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int r = 0;
            int c = a * b;
            while (a%b !=0){
                r = a % b;
                a = b;
                b = r;
            }
            System.out.println(c/b);
        }

运行结果:
请添加图片描述

7、年龄打印

根据输入的年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)

代码展示:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();
        if (age > 0 && age <= 18){
            System.out.println("少年");
        } else if(age >= 19 && age <= 28){
            System.out.println("青年");
        } else if(age >= 29 && age <= 55) {
            System.out.println("中年");
        } else{
            System.out.println("老年");
        }
    }

运行结果:
请添加图片描述

8、模拟密码登录

编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输 入,最多输入三次。三次均错,则提示退出程序

代码展示:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = 0;
        System.out.println("请输入密码");
        while (i<3) {                        //while循环确定次数
            String a = scanner.nextLine();
            if (a.equals("123456789")) {         //equals用来检测两个对象是否相等,即两个对象的内容是否相等,
                System.out.println("输入正确");   //相同返回true,不同返回false。
                break;
            } else {
                System.out.println("输入错误,请重新输入");
                i++;
            }
        }
        if (i==3){
            System.out.println("密码多次错误,24h已锁定");
        }

运行结果:
请添加图片描述

总结

本篇一共8道编程题,虽然难度不大,但是对基础的打牢有一定的帮助,让我们一起携手走向Java的世界,与君共勉。在这里插入图片描述

  • 16
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小奕vi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值