Java刷题-基础篇

目录

题目1:打印1~100内奇数和、偶数和

题目2:计算5的阶乘

[题目3:计算 1!+2!+3!+4!+5! 的和](#题目3:计算 1!+2!+3!+4!+5! 的和)

题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue

题目5:实现猜数字小游戏(不需要菜单)

题目6:判断一个整数是否为素数

[题目7: 打印1~100之间的所有素数](#题目7: 打印1~100之间的所有素数)

题目8:输出1000~2000之间所有的闰年

题目9:输出乘法口诀表

题目10:求两个正整数的最大公约数

题目11:求0~99999之间的"水仙花数"并输出

题目12:写一个函数返回参数在内存中二进制形式1的个数


题目1:打印1~100内奇数和、偶数和

思路:先利用循环得到1~100之间的数,判断如果i是奇数,则sumOdd+=i,如果i为偶数则,sumEven+=i,结束循环后在屏幕上打印结果即可。

java 复制代码
public static void main(String[] args) {
        int i = 1;
        int sumOdd = 0;//奇数
        int sumEven = 0;//偶数
        while (i <= 100) {
            if (i % 2 == 1) {
                sumOdd += i;
            } else {
                sumEven += i;
            }
            i++;
        }
        System.out.println("奇数和"+sumOdd);
        System.out.println("偶数和"+sumEven);
    }

题目2:计算5的阶乘

思路:5!为1*2*3*4*5,将循环变量设为i,进入循环的条件设置为i<=5,在循环里面进行mul*=i的操作(别忘了调整循环变量i的大小),结束循环后在屏幕上打印结果即可。

cpp 复制代码
public static void main(String[] args) {
        int i = 1;
        int mul = 1;
        while (i <= 5) {
            mul *= i;
            i++;
        }
        System.out.println(mul);
    }

题目3:计算 1!+2!+3!+4!+5! 的和

思路:求一个数的阶乘好求,如果要求不同数的阶乘,我们也可以直接利用求一个数阶乘的方法,在它的外面加上一层循环,即变量即j表示求几的阶乘,而原本阶乘方法中的循环的条件改为与 j 相关,循环全部结束后在屏幕上打印结果即可。

java 复制代码
public static void main(String[] args) {
        int j = 1;
        int sum = 0;
        while (j <= 5) {
            int i = 1;
            int mul = 1;
            while (i <= j) {
                mul *= i;
                i++;
            }
            sum += mul;
            j++;
        }
        System.out.println(sum);
    }

题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue

思路:它们的最小公倍数是15,也就是说只要是15的倍数都能被它两整除,可以先利用循环得到1~100之间的数,然后判断i%15是否==0,不是则i++,使用continue不执行后面打印的功能;是则直接打印,然后i++;

java 复制代码
public static void main(String[] args) {
        int i = 1;
        while (i <= 100) {
            if (i % 15 != 0) {
                i++;
                continue;
            }
            System.out.println(i);
            i++;
        }
    }

题目5:实现猜数字小游戏(不需要菜单)

思路:随机数的生成要用到 Random random = new Random(); 得到的随机数写成 int randNum = random.nextInt(100); 的格式,在()写入n就生成 [0,n-1) 之间的数。为了多次猜测,所以用到了while(true),在while内部进行游戏判断的过程即可,如果猜对了用break跳出循环即可。

java 复制代码
public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Random random = new Random();

        int randNum = random.nextInt(100);//[0,100)
        System.out.println("随机数是"+randNum);
        while (true) {
            System.out.print("请输入>");
            int num = scan.nextInt();
            if (num < randNum) {
                System.out.println("猜小了");
            } else if (num == randNum) {
                System.out.println("猜对了");
                break;
            } else {
                System.out.println("猜大了");
            }
        }
    }

题目6:判断一个整数是否为素数

思路:首先了解什么是素数"素数是大于1的自然数,且只能被1或它本身整除"

技巧:构成num的两个数一定有一个小于等于num开平方,因此在写除数时不用写成 i < num,直接写成 i <= Math.sqrt(num),如果num被i整除,则break,说明num肯定不是素数。注意,出for循环后会有两种情况,一种是通过break出来的,另一种是循环结束出来的,因此要判断一下是哪一种情况出来的。

java 复制代码
public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();

        int i = 0;
        for (i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                break;//说明不是素数
            }
        }
        if (i > Math.sqrt(num)) {
            System.out.println(num+"是素数");
        } else {
            System.out.println(num+"不是素数");
        }
    }

题目7: 打印1~100之间的所有素数

思路:在上面判断是否为素数的基础上,加一层循环,得到2~100之间的数,将上面代码中的num替换乘i即可。

java 复制代码
public static void main(String[] args) {
        for (int i = 2; i < 101; i++) {
            int j = 0;
            for (j = 2; j <= Math.sqrt(i) ; j++) {
                if (i % j == 0) {
                    break;
                }
            }
            if (j > Math.sqrt(i)) {
                System.out.println(i+"是素数");
            }
        }
    }

题目8:输出1000~2000之间所有的闰年

思路:判断该年年份是闰年的条件:①能被4整除,但不能被100整除 ②能被400整除

java 复制代码
public static void main(String[] args) {
        for (int i = 1000; i < 2001; i++) {
            if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
                System.out.println(i);
            }
        }
    }

题目9:输出乘法口诀表

java 复制代码
public static void main(String[] args) {
        //外层变化慢
        for (int i = 1; i < 10; i++) {
            //内层变化快
            for (int j = 1; j <= i; j++) {
                System.out.printf("%d*%d=%2d ", i, j, i*j);
            }
            System.out.println();
        }
    }

题目10:求两个正整数的最大公约数

思路:辗转相除法

java 复制代码
public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int a = scan.nextInt();
        int b = scan.nextInt();
        int c = a % b;
        while (c != 0) {
            a = b;
            b = c;
            c = a % b;
        }
        System.out.println(b);
    }

题目11:求0~99999之间的"水仙花数"并输出

思路:水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。先得到100~999999之间的数,判断一下i是几位数(这决定了后面要求每一位的几次方),且由于i不能改变,所以要定义一个临时i去参与计算,每得到i的一位就求它的次方数并放入sum中,最后判断一下在当前循环下sum是否等于i。

java 复制代码
public static void main(String[] args) {
        for (int i = 100; i < 1000000; i++) {
            //1.计算当前数字i是一个几位数
            int count = 0;
            int tmp = i;
            while (tmp != 0) {
                count++;
                tmp /= 12;
            }
            tmp = i;//方便后面再次使用
            int sum = 0;
            //2.求tmp的每一位
            while (tmp != 0) {
                sum += Math.pow(tmp % 10, count);
                tmp /= 10;
            }
            if (sum == i) {
                System.out.println(i);
            }
        }
    }

题目12:写一个函数返回参数在内存中二进制形式1的个数

java 复制代码
public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //例如求:-1在内存中的二进制表示形式1的个数
        // 10000000 00000000 00000000 00000001 -1原码
        // 11111111 11111111 11111111 11111110 -1反码
        // 11111111 11111111 11111111 11111111 -1补码
        // 即有32位
        // 11111111 11111111 11111111 11111111 -1补码
        // 00000000 00000000 00000000 00000001 1的补码
        //通过判断 (-1>>i)& 1 == 1可以实现效果,i < 32
        int a = scan.nextInt();
        int count = 0;
        for (int i = 0; i < 32; i++) {
            if (((a >> i) & 1) == 1) {
                count++;
            }
        }
        System.out.println(count);
    }

本篇文章已完结,谢谢支持哟 ^^ !!!

相关推荐
重生之我在20年代敲代码12 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文13 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people17 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
qmx_071 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战1 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py3 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy3 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript