• 2020年7月27日 练习题4、5、6、7、8、9、12


    /*
    4、随机生成一个100以内的整数,猜数字游戏
    从键盘输入数,如果大了提示,大了,如果小了,提示小了,如果对了,就不再猜了,
    并统计一共猜了多少次
    */
    class Test09_Exer4{
        public static void main(String[] args){
            //随机生成一个100以内的整数,[0,100)
            /*
            Math.random() -->[0,1)的小数
            Math.random()*100 -->[0,100)的小数
            [0,100)的整数 (int)(Math.random()*100 )
            */
            int randNum = (int)(Math.random()*100);
        //    System.out.println(randNum);
            
            //从键盘输入数,如果大了提示,大了,如果小了,提示小了,如果对了,就不再猜了,
            java.util.Scanner input = new java.util.Scanner(System.in);
            int num;//挪到do{}上面,提升作用域
            int count = 0;//统计次数
            do{
                System.out.print("猜数(范围[0,100):");
                num = input.nextInt();
                
                count++;//输入一次,就代表猜一次
                
                if(num > randNum){
                    System.out.println("大了");
                }else if(num<randNum){
                    System.out.println("小了");
                }
            }while(num!=randNum);//条件成立,重复执行循环体语句
            
            System.out.println("一共猜了:" + count + "次");
        }
    }
    /*
    循环嵌套:
    
    5、输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
        例如: 153 = 1*1*1 + 5*5*5 + 3*3*3 
    */
    class Test16_Exer5{
        public static void main(String[] args){
            //所谓水仙花数是指一个3位数==>[100,999]
            //百位:1-9
            //十位:0-9
            //个位:0-9
            
            /*
            当bai=1, shi会从0变到9整个来一轮
            当shi=0,ge会从0变到9整个来一轮
            */
            for(int bai = 1; bai<=9; bai++){
                for(int shi = 0; shi<=9; shi++){
                    for(int ge = 0; ge<=9; ge++){
                        if(bai*bai*bai + shi*shi*shi + ge*ge*ge == bai*100+shi*10+ge){
                            System.out.println(bai*100+shi*10+ge);
                        }
                    }
                }
            }
        }
    }
    /*
    6、从1循环到150并在每行打印一个值,
    另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,
    在每个7的倍数行上打印输出“baz”。
    */
    class Test07_Exer6{
        public static void main(String[] args){
            //从1循环到150
            for(int i=1; i<=150; i++){
                //在每行打印一个i的值
                //System.out.println(i);//输出i之后,立刻换行
                System.out.print(i);//只打印i的值
                
                //每个3的倍数行上打印出“foo”
                if(i%3==0){
                    //System.out.println("foo");//输出foo后立刻换行
                    System.out.print("	foo");//这里加	是为了好看
                }
                
                //在每个5的倍数行上打印“biz”
                if(i%5==0){
                    System.out.print("	biz");
                }
                
                //在每个7的倍数行上打印输出“baz”
                if(i%7==0){
                    System.out.print("	baz");
                }
                
                //最后把这一行的事全部完成后,再换行
                //System.out.print("
    ");
                System.out.println();//只打印换行
            }
        }
    }
    /*
    7、输入两个正整数m和n,求其最大公约数和最小公倍数
    */
    class Test14_Exer7{
        public static void main(String[] args){
            //输入两个正整数m和n
            java.util.Scanner input = new java.util.Scanner(System.in);
            
            int m;
            while(true){
                System.out.print("请输入第一个正整数m的值:");
                m = input.nextInt();
                if(m<=0){
                    System.out.println(m + "不是正整数,请重写输入!");
                }else{
                    break;
                }
            }
            int n;
            while(true){
                System.out.print("请输入第一个正整数n的值:");
                n = input.nextInt();
                if(n<=0){
                    System.out.println(n + "不是正整数,请重写输入!");
                }else{
                    break;
                }
            }
            
            System.out.println("两个正整数:" + m + "," + n);
            
            //求m和n的最大公约数和最小公倍数
            /*
            1、概念
            公约数:能够把m和n都整除,就是它俩的公约数
            例如:6和9,公约数:1,3
                  9和18,公约数:1,3,9
                  5和13,公约数:1
            公倍数:能够被m和n都整除的,就是它俩的公倍数
            例如:6和9,公倍数:18,36....
                   9和18,公倍数:18,36...
                    5和13,公倍数:65,....
            
            2、如何找最大公约数
            例如:6和9
                从6开始,9%6==0?  6%6==0?
                         9%5==0?   6%5==0?
                         9%4==0?   6%4==0?
                         9%3==0?   6%3==0?    binggou找到了  结束查找
            例如:9和18
                从9开始      9%9==0?  18%9==0?   binggou找到了  结束查找
            例如:5和13
                从5开始   5%5==?  13%5==0?
                          5%4==?  13%4==0?
                          5%3==?  13%3==0?
                          5%2==?  13%2==0?
                          5%1==?  13%1==0?   binggou找到了  结束查找
                        其实只要找到5的平方根就可以了
            */
            
            //第一步:找出m和n中最大值和最小值
            int max = m>=n ? m : n;
            int min = m<n ? m : n;
            
            //第二步:从小的开始查找
            //这里的1也可以修改为min的平方根
            int maxYue = 1;
            for(int i=min; i>=1; i--){
                //看i是否能够同时把m和n都整除
                if(m%i==0 && n%i==0){
                    maxYue = i;
                    break;
                }
            }
            System.out.println(maxYue +"是" + m + "和" + n + "的最大公约数");
            
            //最小公倍数 = m*n / 最大公约数
            //System.out.println(m*n/maxYue +"是" + m + "和" + n + "的最小公倍数"); 
            
            //如果不知道这个公式
            //从max开始找,一直找到m*n
            for(int i=max; i<=m*n; i++){
                if(i%m==0 && i%n==0){
                    System.out.println(i +"是" + m + "和" + n + "的最小公倍数"); 
                    break;
                }
            }
        }
    }
    /*
    8、打印1-100之间数,其中3、5、7的倍数不打印
    */
    class Test13_Exer8{
        public static void main(String[] args){
            /*
            不使用continue
            */
            for(int i=1; i<=100; i++){
                //其中3、5、7的倍数不打印
                //如果这个数不是3,5,7的倍数就打印
                if(i%3!=0 && i%5!=0 && i%7!=0){
                    System.out.println(i);
                }
            }
            System.out.println("-----------------------");
            /*
            使用continue
            */
            for(int i=1; i<=100; i++){
                //其中3、5、7的倍数不打印
                //如果是3,5,7的倍数就跳过打印语句
                if(i%3==0 || i%5==0 || i%7==0){
                    //break;//如果用break,那么只打印1和2
                    continue;
                }
                System.out.println(i);
            }
        }
    }
    /*
    9、一个数如果恰好等于它的因子之和,这个数就称为"完数"。(因子:除去这个数本身的约数)
    例如6=1+2+3.编程 找出1000以内的所有完数
    */
    class Test17_Exer9{
        public static void main(String[] args){
            //找出1000以内的所有完数
            for(int i=1; i<1000; i++){
                //判断i是否是完数,如果是就打印i
                /*
                完数?
                    一个数如果恰好等于它的因子之和
                    例如:6的因子:1,2,3
                        1,2,3,6是6的约数,能够把6给整除了
                        因子:除了6本身以外的约数
                    例如:18的因子:1,2,3,6,9
                如何判断i是否是完数?
                (1)先找出i的所有的因子,并且累加它的所有的因子
                (2)判断因子之和与i是否相等,如果相等就是完数
                */
                
                //(1)先找出i的所有的因子,并且累加它的所有的因子
                int iSum = 0;
                for(int j=1; j<i; j++){
                    //如果j能够把i整除了,j就是i的因子
                    if(i%j==0){
                        iSum += j;
                    }
                }
                
                //(2)判断因子之和与i是否相等,如果相等就是完数
                if(i == iSum){
                    System.out.println(i);
                }
            }
        }
    }
    //12、找出1-100之间所有的素数(质数)
    class Test18_Exer12{
        public static void main(String[] args){
            //找出1-100之间所有的素数(质数)
            //1-100之间
            for(int i=1; i<=100; i++){
                //里面的代码会运行100遍
                //每一遍i的值是不同的,i=1,2,3,4,5...100
                //每一遍都要判断i是否是素数,如果是,就打印i
                /*
                如何判断i是否是素数
                (1)找出i的所有的约数,并累加它们的和
                例如:
                    i=5,它的约数有1和5,约数和:6
                    i=11,它的约数有1和11,约数和:12
                    i=18,它的约数有1,2,3,6,9,18,约数和:39
                (2)如果某个i的约数和 == i+1,那么i就是素数
                */
                //(1)找出i的所有的约数,并累加它们的和
                int iSum = 0;
                for(int j=1; j<=i; j++){
                    if(i%j==0){
                        //j是i的约数
                        iSum += j;
                    }
                }
                //(2)如果某个i的约数和 == i+1,那么i就是素数
                if(iSum == i+1){
                    System.out.println(i);
                }
                
            }
        }
    }

    //12、找出1-100之间所有的素数(质数)
    class Test18_Exer12_2{
        public static void main(String[] args){
            //找出1-100之间所有的素数(质数)
            //1-100之间
            for(int i=1; i<=100; i++){
                //里面的代码会运行100遍
                //每一遍i的值是不同的,i=1,2,3,4,5...100
                //每一遍都要判断i是否是素数,如果是,就打印i
                /*
                如何判断i是否是素数
                (1)找出i在[2,i-1]之间的约数的个数
                (2)如果这个个数是0,那么i就是素数
                */
                int iCount = 0;
                for(int j=2; j<i; j++){
                    if(i%j==0){//j是i在[2,i-1]之间的约数
                        iCount++;
                    }
                }
                
                //(2)如果这个个数是0,那么i就是素数
                if(iCount == 0){
                    System.out.println(i);
                }
            }
        }
    }
    //12、找出1-100之间所有的素数(质数)
    class Test18_Exer12_3{
        public static void main(String[] args){
            //找出1-100之间所有的素数(质数)
            //1-100之间
            for(int i=1; i<=100; i++){
                //里面的代码会运行100遍
                //每一遍i的值是不同的,i=1,2,3,4,5...100
                //每一遍都要判断i是否是素数,如果是,就打印i
                /*
                如何判断i是否是素数
                (1)假设i是素数
                boolean flag = true;//true代表素数
                (2)找i不是素数的证据
                如果在[2,i-1]之间只要有一个数能够把i整除了,说明i就不是素数
                修改flag = false;
                (3)判断这个flag
                */
                
                //(1)假设i是素数
                boolean flag = true;//true代表素数
                //(2)找i不是素数的证据
                for(int j=2; j<i; j++){
                    if(i%j==0){
                        flag = false;//找到一个就可以了
                        break;
                    }
                }
                //(3)判断这个flag
                if(flag){
                    System.out.println(i);
                }
            }
        }
    }

    //12、找出1-100之间所有的素数(质数)class Test18_Exer12_2{public static void main(String[] args){//找出1-100之间所有的素数(质数)//1-100之间for(int i=1; i<=100; i++){//里面的代码会运行100遍//每一遍i的值是不同的,i=1,2,3,4,5...100//每一遍都要判断i是否是素数,如果是,就打印i/*如何判断i是否是素数(1)找出i在[2,i-1]之间的约数的个数(2)如果这个个数是0,那么i就是素数*/int iCount = 0;for(int j=2; j<i; j++){if(i%j==0){//j是i在[2,i-1]之间的约数iCount++;}}//(2)如果这个个数是0,那么i就是素数if(iCount == 0){System.out.println(i);}}}}

  • 相关阅读:
    NumPy笔记:运算符(exp,sqrt,square)
    NumPy笔记:常用操作
    php字符操作
    laravel如何实现批量插入
    php中@符号的作用
    laravel如何实现数据的批量插入
    如何在laravel框架中使用阿里云的oss
    laravle如何设置mysql数据表前缀
    thinkphp视图中如何调用并且向控制器传参数
    thinkphp如何隐藏入口文件index.php
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13388061.html
Copyright © 2020-2023  润新知