循环的使用

输入两个正整数m和n,求其最大公约数和最小公倍数。

private static void demo4() {
        //需求1:最大公约数
        int m = 12, n = 20;
        //取出两个数中的较小值
        int min = (m < n) ? m : n;

        for (int i = min; i >= 1; i--) {//for(int i = 1;i <= min;i++){

            if (m % i == 0 && n % i == 0) {
                System.out.println("最大公约数是:" + i); //公约数

                break; //跳出当前循环结构
            }
        }
        
        //需求2:最小公倍数
        //取出两个数中的较大值
        int max = (m > n) ? m : n;

        for (int i = max; i <= m * n; i++) {

            if (i % m == 0 && i % n == 0) {

                System.out.println("最小公倍数是:" + i);//公倍数

                break;
            }
        }
    }

对比三种循环结构

  • 三种循环结构都具有四个要素:
    • 循环变量的初始化条件
    • 循环条件
    • 循环体语句块
    • 循环变量的修改的迭代表达式
  • 从循环次数角度分析
    • do-while循环至少执行一次循环体语句。
    • for和while循环先判断循环条件语句是否成立,然后决定是否执行循环体。
  • 如何选择
    • 遍历有明显的循环次数(范围)的需求,选择for循环
    • 遍历没有明显的循环次数(范围)的需求,选择while循环
    • 如果循环体语句块至少执行一次,可以考虑使用do-while循环
    • 本质上:三种循环之间完全可以互相转换,都能实现循环的功能

打印"菱形"形状的图案

        * 
      * * * 
    * * * * * 
  * * * * * * * 
* * * * * * * * * 
  * * * * * * * 
    * * * * * 
      * * * 
        * 	
  private static void demo5() {
    /*
            上半部分		i		m(表示-的个数)    n(表示*的个数)关系式:2*i + m = 10 --> m = 10 - 2*i
        --------*		   1	   8			   1							n = 2 * i - 1
        ------* * *		   2	   6			   3
        ----* * * * *	   3	   4			   5
        --* * * * * * *	   4	   2		       7
        * * * * * * * * *  5	   0			   9
    
            下半部分         i      m                n              关系式: m = 2 * i
        --* * * * * * *    1       2                7                     n = 9 - 2 * i
        ----* * * * *      2       4                5
        ------* * *        3       6                3
        --------*          4       8                1
    
                */
        //上半部分
        for (int i = 1; i <= 5; i++) {
            //-
            for (int j = 1; j <= 10 - 2 * i; j++) {
                System.out.print(" ");
            }
            //*
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("* ");
            }
            System.out.println();
        }
        //下半部分
        for (int i = 1; i <= 4; i++) {
            //-
            for (int j = 1; j <= 2 * i; j++) {
                System.out.print(" ");
            }

            //*
            for (int k = 1; k <= 9 - 2 * i; k++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }

找出100000以内所有的素数(质数)
分析:素数(质数):只能被1和它本身整除的自然数。 —> 从2开始,到这个数-1为止,此范围内没有这个数的约数。则此数是一个质数。

 private static void demo6() {
        long start = System.currentTimeMillis(); //记录当前时间距离1970-1-1 00:00:00的毫秒数

        int count = 0;//记录质数的个数

        label:
        for (int i = 2; i <= 100000; i++) {  //i

            for (int j = 2; j <= Math.sqrt(i); j++) { //优化2:将循环条件中的i改为Math.sqrt(i)

                if (i % j == 0) { //表明i有约数
                    continue label;
                }

            }
            //一旦程序能执行到此位置,说明i就是一个质数
            System.out.println(i);
            count++;
        }


        long end = System.currentTimeMillis();
        System.out.println("质数的个数为:" + count);
        System.out.println("执行此程序花费的毫秒数为:" + (end - start));//49
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值