• 使用Java语言做几个小小练习题吧


    对于Java语言,笔者刚刚入门!但是,也酝酿了许久!今日,打算发一篇小小的练习题:由Java语言实现(初级),特别简单,在C语言初级阶段,笔者都已经见识过,做过了!!表示,小白合适的练习题!!

    1. 判断一个数字是不是素数(排除1和负数)三种方法求解
    2. 求出1到100之间的所有素数!
    3. 输出乘法口诀(可以指定乘法口诀的大小)!
    4. 求两个数字的最大公约数(辗转相除法)!
    5. 求出0到999之间的所有“水仙花数”,并输出!
    6. 求出某个数中二进制1的个数!!(三种方法)
    7. 获取一个二进制中所有的偶数位和所有的奇数位,并分别输出二进制序列!
    8. 编写程序,数一下:1到100之间的所有整数中,出现多少个数字9!(此时99算两个!)
    9. 判断1到100之间有多少个数字里面有9!(此时99算一个!)
    10. 打印X图形!(随机定义大小)

    对于上述的练习题,笔者有的个别题目涉及到了多种方法!!请大家仔细辨别!!

    注意,本文笔者创建了一个文件名,叫做:Add.java  !请大家不要弄混肴!!要保持文件名与类名一致!

    1.判断一个数字是不是素数(排除1和负数)三种方法求解

    判断一个数字是不是素数,我们可以根据素数的定义来进行!(方法1)

    请看笔者的代码:

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner =new Scanner(System.in);
    5. int n = scanner.nextInt();
    6. int i=2;
    7. for(i=2;i<n;i++) {
    8. if(n%i==0) {
    9. //System.out.println(n+"不是素数!");
    10. break;
    11. }
    12. }
    13. if(i==n) {
    14. System.out.println(n+"是素数!");
    15. }
    16. }
    17. }

    上述代码的运行结果为:

     方法2

    其实对于一个数字n 可以写成n=a*b的形式!!

    对于:16这个数字而言!16=1*16,  16=2*8;   16=4*4!

    因此,我们发现对于一个数字n,一定会有一个数字小于等于n/2是n的因数!

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner =new Scanner(System.in);
    5. int n = scanner.nextInt();
    6. int i=2;
    7. for(i=2;i<=n/2;i++) {
    8. if(n%i==0) {
    9. //System.out.println(n+"不是素数!");
    10. break;
    11. }
    12. }
    13. if(i>n/2) {
    14. System.out.println(n+"是素数!");
    15. }
    16. }
    17. }

    注意一下区别!!仅仅更改了部分代码!!

    方法3!

    其实对于一个数字n 可以写成根号的形式!!

    对于:16这个数字而言!16=1*16,  16=2*8;   16=4*4!

    因此,我们发现对于一个数字n,一定会有一个数字小于等于根号n的!

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner =new Scanner(System.in);
    5. int n = scanner.nextInt();
    6. int i=2;
    7. for(i=2;i<=Math.sqrt(n);i++) {
    8. if(n%i==0) {
    9. // System.out.println(n+"不是素数!");
    10. break;
    11. }
    12. }
    13. if(i>Math.sqrt(n)) {
    14. System.out.println(n+"是素数!");
    15. }
    16. }
    17. }

    2.求出1到100之间的所有素数!

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int n = scanner.nextInt();
    6. for (int j =1; j<=n; j++) {
    7. int i=2;
    8. for (i=2;i<=Math.sqrt(j);i++) {
    9. if(j%i==0) {
    10. break;
    11. }
    12. }
    13. if(i>Math.sqrt(j)) {
    14. System.out.println(j+"是素数!");
    15. }
    16. }
    17. }
    18. }

    上述代码的运行结果为:

     3.输出乘法口诀(可以指定乘法口诀的大小)

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int n = scanner.nextInt();
    6. for(int i=1;i<=n;i++) {
    7. for(int j=0;j<=i;j++) {
    8. System.out.print(i+"*"+j+"="+i*j+" ");
    9. }
    10. System.out.println();
    11. }
    12. }
    13. }

    代码的运行结果为:

     4.求两个数字的最大公约数(辗转相除法)

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int a = scanner.nextInt();
    6. int b = scanner.nextInt();
    7. int c=a%b;
    8. while(c!=0) {
    9. a=b;
    10. b=c;
    11. c=a%b;
    12. }
    13. System.out.println("最大公约数为:"+b);
    14. }
    15. }

    代码的运行结果为:

    5. 求出0到999之间的所有“水仙花数”,并输出

    对于得到水仙花数,我们主要有两个难点!(以153为例!)

    1. 如何获得每一位数字??
    2. 如何获得这个数字是几位数??

     

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int n = scanner.nextInt();
    6. for (int i = 0; i < n ; i++) {
    7. //判断是几位数?
    8. int count=0;
    9. int tmp=i;
    10. while(tmp!=0) {
    11. count++;
    12. tmp=tmp/10;
    13. }
    14. //此时tmp为0;但是i不为0
    15. tmp = i;
    16. int sum=0;
    17. while(tmp!=0) {
    18. sum+=Math.pow(tmp%10,count);
    19. tmp=tmp/10;
    20. }
    21. if(sum==i) {
    22. System.out.println(i);
    23. }
    24. }
    25. }
    26. }

    代码的运行结果为:

     6.求出某个数中二进制1的个数!!(三种方法)

    方法1

     假设该数字为15:二进制中含有4个1

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int n = scanner.nextInt();
    6. int count=0;
    7. for (int i = 0; i < 32; i++) {
    8. if(((n>>>i)&1)!=0) {
    9. count++;
    10. }
    11. }
    12. System.out.println(count);
    13. }
    14. }

    代码的运行结果为:

     上述代码中:if(((n>>>i)&1)!=0)  : 无符号右移!!可以解决负数死循环的问题!!当输入的数字为负数的时候,符号数为1,右移以后,增添1,然后会导致死循环!!

    对于上述的代码,如果输入的数字很小,但是也会运行32次!!所以显得有点浪费循环的次数!!

    方法2

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int n = scanner.nextInt();
    6. int count=0;
    7. while(n!=0) {
    8. if((n&1)!=0) {
    9. count++;
    10. }
    11. n=n>>>1;
    12. }
    13. System.out.println(count );
    14. }
    15. }

    方法3

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int n = scanner.nextInt();
    6. int count=0;
    7. while(n!=0) {
    8. n=n&(n-1);
    9. count++;
    10. }
    11. System.out.println(count );
    12. }
    13. }

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

    该问题主要在于:判断一个数的二进制中是1还是0就可以了!因此,可以按位与一个1就可以求出!

    从右往左数!!

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int n = scanner.nextInt();
    6. System.out.println("偶数位:");
    7. for (int i = 31; i >=1; i=i-2) {
    8. System.out.print(((n>>i)&1)+" ");
    9. }
    10. System.out.println();
    11. System.out.println("奇数位:");
    12. for (int i = 30; i >=0; i=i-2) {
    13. System.out.print(((n>>i)&1)+" ");
    14. }
    15. }
    16. }

    代码的运行结果为:

     8.编写程序,数一下:1到100之间的所有整数中,出现多少个数字9!(此时99算两个!)

    1. public class Add {
    2. public static void main(String[] args) {
    3. int count=0;
    4. for(int i=0;i<=100;i++) {
    5. if(i%10==9) {
    6. count++;
    7. }
    8. if(i/10==9) {
    9. count++;
    10. }
    11. }
    12. System.out.println(count);
    13. }
    14. }

     代码的运行结果为:

     9.判断1到100之间有多少个数字里面有9!(此时99算一个!)

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. int count=0;
    5. for(int i=0;i<=100;i++) {
    6. if(i%10==9) {
    7. count++;
    8. } else if(i/10==9) {
    9. count++;
    10. }
    11. }
    12. System.out.println(count);
    13. }
    14. }

     代码的运行结果为:

     10.打印X图形!(随机定义大小)

    1. import java.util.Scanner;
    2. public class Add {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner((System.in));
    5. int n = scanner.nextInt();
    6. for(int i=0;i<n;i++) {
    7. for(int j=0;j<n;j++) {
    8. if(i==j||i+j==n-1) {
    9. System.out.print("*");
    10. } else {
    11. System.out.print(" ");
    12. }
    13. }
    14. System.out.println();
    15. }
    16. }
    17. }

     代码的运行结果为:

     

  • 相关阅读:
    vim YouCompleteMe报错:version `GLIBCXX_3.4.20‘ not found 解决方法
    在Qt creator中使用多光标
    刷题记录(NC15033 小G有一个大树,NC51178 没有上司的舞会)
    Java——》synchronized的使用
    矩阵中幸运数(Python)
    2018-2022年盟浪 ESG数据
    spring01
    在minkube上部署Milvus
    Java架构师之路八、安全技术:Web安全、网络安全、系统安全、数据安全等
    C++学习:函数重载
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/127634983