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);
    }

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

相关推荐
菜鸟学Python2 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
一个小坑货9 分钟前
Cargo Rust 的包管理器
开发语言·后端·rust
bluebonnet2713 分钟前
【Rust练习】22.HashMap
开发语言·后端·rust
古月居GYH14 分钟前
在C++上实现反射用法
java·开发语言·c++
在下不上天39 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
陌小呆^O^1 小时前
Cmakelist.txt之win-c-udp-client
c语言·开发语言·udp
儿时可乖了1 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
ruleslol1 小时前
java基础概念37:正则表达式2-爬虫
java