大号在练葵花宝典 发表于 2025-3-18 06:05:37

Java练习题(二):逻辑控制编程题

目录
1.判断一个数是否为素数
2.输出1-100 之间的所有素数
3.输出1000 - 2000 年之间的闰年
4.计算 1到 100 的所有整数中出现多少个数字9
5.输出一个整数在内存当中存储时,二进制1的个数
6.求两个数的最大公约数
7.计算1 - 1/2 + 1/3 - 1/4 + 1/5 …… + 1/99 - 1/100
8.水仙花数
9.实现猜数字游戏
10.打印 X 图形
11.打印乘法口诀表
12.输出一个整数的每一位
13.模仿登录
14.二进制序列
15.四舍五入
16.交换变量值
17.三目运算符新用法
18.验证邮箱格式
19.数列求和
20.求两个数的最小公倍数
21.输入任意多个数字,当输入负数时结束,求出他们的平均数
22.自由落体小球弹起n次所经过的路程与高度
<hr> 1.判断一个数是否为素数

素数是指质数,一个大于1的自然数,除了1 和它自身外,不能整除其他自然数的数叫做质数;否则称为合数。规定1既不是质数也不是合数。
思路:
首先输入一个大于1的正整数n;
再根据素数的定义 除了本身本身和1之外没有因数 即从2 到n-1;
使用for循环 从2除到n-1 使用if语句判断 若在此过程中除余为零 则此数不是素数,若除到n-1还没有出现除余为零的情况 则此数为素数;
public class Main {
    public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入一个大于1的整数:");
      int num = scanner.nextInt();
      int i = 2;
      for (;i<=num-1;i++){
            if (num%i == 0){
                System.out.println("该数字不是素数");
                break;
            }
      }//此时循环结束 i = num
      if (num == i){
            System.out.println("该数字是素数");//使用if是考虑输入的num=2时
      }
      
    }
} <hr> 2.输出1-100 之间的所有素数

思路:嵌套for循环
外部for循环 i从2到100 (因为素数是一个大于1的整数,所以从2开始)
内部for循环j从2 到 i-1 (因为除了1和 i 本身外,不能被其他整数整除,所以获取2到 i -1)。
在内部for循环内使用if选择结构,判断 j 能否被 i整除。
在外部for循环内使用if选择结构,判断 j 与 i 是否相等。
public class Main {
    public static void main(String[] args) {
      //1不是素数 i从2开始到100循环判断
      for (int i = 2;i<=100;i++){
            int j = 2;//除了1和i本身,则j从2到i-1
            for (;j < i;j++){
                if (i%j==0){
                  break;//如果有整除,则不是素数,应跳出内部循环,进入下一个i的循环
                }//if一直不满足整除,则进行j自增 如5%2、5%3、5%4
            }//当j自增到等于i时还未有整除,此时循环结束,说明i是素数,此时i=j
            if (i==j){//使用if是考虑到i=2时
                System.out.print(i+" ");
            }
      }

    }
} <hr> 3.输出1000 - 2000 年之间的闰年

闰年:公历年份是4的倍数且不是100的倍数
for (int year = 1000;year <= 2000;year++){
    if (year % 4 == 0 && year % 100 != 0){
      System.out.println(year);
    }
} <hr> 4.计算 1到 100 的所有整数中出现多少个数字9

public class Main {
    public static void main(String[] args) {
      int count = 0;
      for (int n = 1;n <= 100;n++){
            while (n % 10 == 9){
                count++;
                break;//不跳出当前循环 则n=1时一直在判断while语句 进入死循环
            }
      }
      System.out.println(count);
    }
} <hr> 5.输出一个整数在内存当中存储时,二进制1的个数

如:15:0000 1111四个1
思路:一个数和1相与 如果末位是1,则结果为1 、如果末位是0,则结果为0
0000 1111 & 0000 0001==0000 0001
将该数和1进行按位与运算,运算后再进行移位运算,交替计算,直到该数移位到零为止。根据结果可计算出二进制位中1的个数
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入一个数字:");
      int num = scanner.nextInt();
      int count = 0;
      while (num != 0){
            if ((num & 1) == 1){
                count++;
            }
            num = num >> 1;//移位运算要赋值,不能单独写
      }
      System.out.println(count);
    }
} <hr> 6.求两个数的最大公约数

如输入:8 16 最大公约数 :8
方法一:欧几里德算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数.
算法流程图:
https://i-blog.csdnimg.cn/blog_migrate/f7c5dd2343f39917c7568f0e9f377f19.png
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner scanner1 = new Scanner(System.in);
      Scanner scanner2 = new Scanner(System.in);
      System.out.println("请分别输入两个数:");
      int a = scanner1.nextInt();
      int b = scanner2.nextInt();
      int r;
      while(a%b!=0)
      {
            r = a%b;
            a = b;
            b = r;
      }
      System.out.println("最大公约数为:"+b);

    }
}
方法二:更相减损法, 出自于中国古代的《九章算术》
  ①先判断两个数的大小,如果两数相等,则这个数本身就 是就是它的最大公约数。
  ②如果不相等,则用大数减去小数,然后用这个较小数与它们相减的结果相比较,如果相等,      这个差就是它们的最大公约数,而如果不相等,则继承实行②操纵。
算法流程图:
https://i-blog.csdnimg.cn/blog_migrate/34ce0965b11f35c29bc6f671f356016e.png
import java.util.Scanner;

public class Main {
    public static void main(String[] args)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Java练习题(二):逻辑控制编程题