栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

《JAVASE系列》经典十道基础算法题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《JAVASE系列》经典十道基础算法题

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

文章目录

《JAVASE系列》经典十道基础算法题

前言:1.打印出1000 - 2000年的闰年2.打印1-100的素数3.判断素数4.判断年龄在什么阶段5.水仙花数6.最大公约数7.二进制的偶数位与奇数位8.密码登录9.乘法表10.数 1 的个数总结:


《JAVASE系列》经典十道基础算法题 前言:

本章在学完javase的数据类型,运算符,循环与分支之后,写了多道算法题以后,总结了十道最经典的基础算法题

1.打印出1000 - 2000年的闰年

闰年的记录方式

普通闰年:公历年份是4的倍数且不是100的倍数为普通闰年(如2004、2020年就是闰年)。

世纪闰年:公历年份是整百数的,必须是400的倍数才是世界闰年(如2000是世纪闰年,1900不是世纪闰年)。

代码展示:

public static void main(String[] args) {
       int year = 0;
        System.out.println("leapyear:");
       for(year=1000;year<=2000;year++)
       {
           if((year%4==0&&year%100!=0)||year%400==0)
           {
               System.out.println(year+" ");
           }
       }
    }

代码讲解:

通过for循环来实现1000到2000的数字,然后用选择语句来判断是否是闰年,如果是则打印,否则不打印。

运行结果

2.打印1-100的素数

什么是素数:

除了能被1和它本身整除而不能被其他任何数整除的数。 根据素数定义 只需要用2到n-1去除n,如果都除不尽,则n是素数,否则,只要其中有一个数能整除则n不是素数。

代码展示:

public static void main2(String[] args) {
        int i = 0;
        for(i=1;i<=100;i++) {
            int flag = 0;
            int j = 0;
            for(j=2;j<=i-1;j++) {
                if(i%j==0) {
                    flag = 1;
                    break;
                    }
                }
            if(flag==0){
                System.out.println(i);
            }
        }
    }
}

代码讲解

通过第一个for循环实现1-100的数字,再利用第二个for循环实现从2 到 i - 1 的数字能否整除i,如果能 i 就不是素数,记录点flag = 1,跳出第一个循环,由于flag = 1,所以最后的if语句不执行,所以不会打印出不是素数的i,如果都不能整除,则i就是素数,flag 还是为0,所以最后if语句会执行,打印出i。

运行结果:

3.判断素数

代码展示:

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int PrimeNumber = scan.nextInt();
    int flag = 0;
    for (int i = 2; i < PrimeNumber; i++) {
            if(PrimeNumber%i==0) {
                flag = 1;
                break;
            }
    }
    if(flag==0){
        System.out.println(PrimeNumber);
    }
    else{
        System.out.println("noPrimeNumber");
    }
}

代码讲解:

在第2题原来的基础上将for循环产生的1 - 100的数字改为输入某一个数字。

运行结果:

4.判断年龄在什么阶段
根据输入的年龄, 来打印出当前年龄的人是少年(低于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>18&&age<=28)
        {
            System.out.println("青年");
        }
        else if(age>=28&&age<=55)
        {
            System.out.println("中年");
        }
        else{
            System.out.println("老年");
        }
    }

代码讲解:

多分支情况一般用if,else语句。当然也可以用switch语句。

运行结果:

5.水仙花数
求出0~999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本 身,如;153=1+5+3?,则153是一个“水仙花数“。)

代码展示:

public static void main5(String[] args) {;
        for (int i = 100; i < 1000; i++) {
            int ret = i;
            int a = ret % 10;
            int b = (ret/10)%10;
            int c = ret/100;
            int pd = a*a*a+b*b*b+c*c*c;
            if(pd == i) {
                System.out.println(i);
            }
        }
    }

代码讲解:

通过 int a = ret % 10求出个位数,再通过ret/10得到百位数与十位数,%10只后就是十位数,赋值给b,b就是十位数数字,ret/100得到百位上的数字

a即为个位数,b即为十位数,c即为百位数

运行结果:

6.最大公约数
求两个正整数的最大公约数

代码展示:

public static void main6(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);
    }

代码讲解:

利用辗转相除法, 又名欧几里得算法(Euclidean algorithm),目的是求出两个正整数的最大公约数。 它是已知最古老的算法, 其可追溯至公元前300年前。 这条算法基于一个定理: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。

运行结果:

7.二进制的偶数位与奇数位
获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列

代码展示:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int a1 = a;
        System.out.println("偶数位");
        for (int i = 31; i >= 0; i-=2) {
            int ret = (a>>>i)&1;
            System.out.print(ret+" ");
        }
        System.out.println();
        System.out.println("奇数位");
        for (int i = 30; i >= 0; i-=2) {
             int ret = (a1>>>i)&1;
            System.out.print(ret+" ");
        }

    }

代码讲解:

利用移位操作符来实现将一个数的二进制的每一位都与1的二进制进行逻辑与运算。只要移位之后的第一个二进制位为 1, 与 1 的二进制进行”逻辑与“运算时才为1,0则为0,ret也就只有 0 1 两种结果了。进行偶数位与奇数位的循环移位,最后得到二进制的偶数位与奇数位

运行结果:

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

代码展示

public static void main8(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = 0;
        while(i<3)
        {
            String a = scanner.nextLine();
            if(a.equals("123456789")){
                System.out.println("输入正确");
                break;
            }
            else{
                System.out.println("输入错误,请重新输入");
                i++;
            }
        }
        if(i==3)
        {
            System.out.println("错误三次!");
        }
    }

代码讲解:

利用循环确定输入次数,equals为字符串类型的比较方法。相同返回ture,不同返回flase,如果输入正确,则打印输入正确,跳出循环,程序结束。如果连续输入错误3次,循环结束,i==3,打印错误三次,程序结束

运行结果:

9.乘法表

输入n,打印n*n的乘法表

代码展示:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int i = 0;
    for(i=1;i<=n;i++){
        int j = 0;
        for(j=1;j<=i;j++){
            System.out.print(i+"*"+j+" = "+ i*j);
            System.out.print(" ");
        }
        System.out.println();
    }
}

代码讲解:

第一个for循环确定有列,使得输入n,就会有n行。第二个for循环确定列,利用i来确定第一行有一个,第二行有两个…以此类推。

运行结果:

10.数 1 的个数
数出一个数的二进制中 1 的个数

代码展示:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int a = scanner.nextInt();
    int i = 32;
    int num = 0;
    for(i=31;i>=0;i--){
        int ret = (a>>i)&1;
        if(ret==1){
            num++;
        }
    }
    System.out.println(num);
}

代码讲解:

通过for循环来一步一步地去移位a,并与1的二进制进行逻辑与运算,如果ret=1,则有一个位的数字为1,num+1…循环32次后,循环结束。打印出num。

运行结果:

总结:

通过这十道题可以很好地巩固java语法与真正地入门编程。希望读者能认真得独立刷一遍。

欢迎关注,感激不尽。

与君共勉!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号