• 08 嵌套循环例题


    快捷键:

    size . for 回车 --->  

    10.fori 回车--->for (int i = 0; i < 10; i++) {  }

    10.forr 回车  --->  for (int i = 10; i > 0; i--) {  }

     题:假设小明有100块钱,这时候小明去超市需要换超市提供的零钱有1元面值,2元面值,5元面值,10元面值,20元面值,50元面值,问小明可以有多少种兑换方式?
    
     int count = 0; //声明变量的语法格式,  定义兑换的次数  初始值为0
            for (int x = 0; x <= 100; x++) {//  ++ --> 给x变量自增1 第一次循环x = 0,第二次等于1
                for (int y = 0; x <= 50; x++) {
                    for (int z = 0; x <= 20; x++) {
                        for (int m = 0; x <= 10; x++) {
                            for (int n = 0; x <= 5; x++) {
                                for (int p = 0; x <= 2; x++) {
                                    if (x * 1 + y * 2 + z * 5 + m * 10 + n * 20 + p * 50 == 100) {
                                        count++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            //输出100元可以兑换的次数
            System.out.println("100元可以兑换零钱的次数是:"+ count);//
    100元可以兑换零钱的次数是:4562
    
    
         题:菱形
            int line =4;
            for( int i = 1 ; i <= line ; i++  ){
                for (int n = 1 ; n <2* (line -i ) + 1 ; n++  ){
    
                    System.out.print(" ");
                }
                for( int m = 1 ; m < 4*i - 2 ; m++  ){
                    System.out.print("*");
                }
                System.out.println();
            }
    
            int height = 3;
            for( int a = 1 ; a <= height ; a++){
                for( int b = 1 ; b <= 2*a  ; b++  ){
                    System.out.print(" ");
                }
                for ( int c = 1 ; c <= 4*(height - a)+1 ; c++){
                    System.out.print("*");
    
                }
                System.out.println();
    
            }
    
    
    题:求一下10以内的所有阶乘数的和 1!+2!+3!+.....+10!=?
    
    
         int sum = 0;//累加和
            for (int i = 0; i <= 10; i++) {
                //乘积值
                int product = 1;
                for (int k = 1;k <= i ; k++){
                    product = product * k;
                }
                //累加
                sum = sum + product;
            }
            //十以内的阶乘数和为:
            System.out.println("10以内的阶乘数和为" + sum);    
           斐波那契
    
          交换a,b的值(借助第三个数作为中间变量)
    
            int a = 3;
            int b = 4;
            int c = 5;
            c = a;
            a = b;
            b = c;
    该题使用斐波那契数列会简单(可百度自查斐波那契数列或者java兔子题)
    
    题:生兔子案列:假设你有一对兔子,第一个月不生,第二个月也不生,第三个月开始生一对兔子,从第三个月开始每个月都生一对兔子,小兔子长大到第三个月后每个月又生一对兔子,假如兔子都不死,问12个月之后,你拥有多少对兔子?
    
     int a1 = 1;
        int a2 = 1;
        int an = 0;//累加初始值为0
        //循环次数  12月  10次 从第三个月开始  <=12
        for (int i = 3; i <=12 ; i++){
            an=a1 +a2;
            //an  就是第三项变量,
            a1 = a2;
            a2 = an;
        }
        // 输出第12个月拥有的兔子
            System.out.println("第十二个月拥有"+ an +"对兔子");//第十二个月拥有144对兔子
    
    
    
    
    
    题:猴子去桃园偷桃然后吃桃,吃了偷的桃子的一半然后又多吃了一个,第二天又吃了一半又多吃了有一个,连续到第十天还剩一个,问它透了多少桃子?
         int a10 = 1 ;//定义第十天的桃子
            for ( int i = 9 ; i >= 1 ; i-- ){
                a10 = (a10+1)*2;//  前一天的桃子树
            }
            //输出
            System.out.println("第一天的桃子数"+a10);
    题:给定任意一个10位以内的正整数,确定该数是几位数?
    
        int count = 1;// 定义的位数 初始值为1
            //21开头的十位数
            int num = 1894949494;
            int num02 = num;
            while ( num / 10 != 0 ){
                count ++;
                num = num /10;
            }
            //输出10位以内的正整数为
            System.out.println(num02 + "是一个" + count + "位数");
    题:将一个正整数分解成因数, 如:12 = 2 * 3 * 2
                                             如:20 = 2*5*2
    
    
     int num = 125;//125 = 5*5*5
            System.out.print(num + "  = ");
            //循环判断
            for(int i = 2 ; i < num ; i++ ){
                //该数本身不知道要分解几次  while
                while(num != i){
                    if( num % i == 0 ){
                        //整除,就把该数拼接上
                        System.out.print( i + "*");
    
                        //下一次参与运算的值  =  原来的数 / i 求商数
                        num = num /i;
    
                    }else{
                        break;
                    }
                }
            }
                //输出该数可以分解的质因数为
            System.out.println( num);
    题:给定任意两个正整数,求一下他们的最大公约数和最小公倍数。
    
    
    解题思路:
                    18  60  --->  1 2 3    6最大公约数
                    18  60  --->  18 --> 6*3  60--> 6*10 最小公倍数 = 18* 60 = 3*6*10=180
    
    
            int num01 = 18;
            int num02 = 60;
            int max = 0;//最大公约数
            int min = 0;//最小公倍数
            // 解题算法:是根据两数之间的最小/大数来判断的
            if(num01 > num02){
                int temp = num01;//最大值
                num01 = num02;//吧最小值给最大值变量
                num02 = temp; // num02就是最大值
            }
            //循环遍历判断  循环次数最少的那个就是num01
            for (int i = 1 ; i <= num01; i++){
                //求公约数
                if(num01 % i == 0 &&num02 % i == 0){
                    max = i;//把除数赋给max
                }
            }
                min = num01 * num02 / max;
                //输出最大公约数和最小公倍数为
            System.out.println(max +" "+ min);
    题:求一下1000以内的所有的完数。
    
    
     完数 = 一个数如果恰好等于他的因子之和,这个数就称为完数 6 = 1 + 2 + 3 = 6
             for(int i = 1; i <= 1000; i++){
            //定义累加和
                    int sum = 0;
                    //循环次数i/2
                    for(int j = 1; j<= i/2; j++){
                        if(i%j == 0){
                            //表明  可以整除
                            sum = sum + j;//
                        }
                    }
                    //判断 i == sum
                    if (i == sum){
                        System.out.println(i + "");
                    }
    
        }
    题: 有10个按钮围城一圈,第一次按到1,第二次按到3,第三次按到6,第四次按到10,第五次按到15,第六次按到21.......试问第10000次的时候有哪些按钮没有被按到,按到的按了多少下?
    
    
    
    
    
    
    int a = 1;//定义初始按到圆圈
            int a1 = 0;//圆圈为1的次数
            int a2 = 0;//圆圈为2的次数
            int a3 = 0;//圆圈为3的次数
            int a4 = 0;//圆圈为4的次数
            int a5 = 0;//圆圈为5的次数
            int a6 = 0;//圆圈为6的次数
            int a7 = 0;//圆圈为7的次数
            int a8 = 0;//圆圈为8的次数
            int a9 = 0;//圆圈为9的次数
            int a10 = 0;//圆圈为10的次数
            int b = 0; //定义被按到的圆圈
            //循环1万次
            for (int i = 2; i <= 10001;i++){
            b = a % 10 ;//圆圈对应的数字
                //分条件进行圆圈数的累加
                switch(b){
                    case 1 :
                        a1++;
                        break;
                    case 2 :
                        a2++;
                        break;
                    case 3 :
                        a3++;
                        break;
                    case 4 :
                        a4++;
                        break;
                    case 5 :
                        a5++;
                        break;
                    case 6 :
                        a6++;
                        break;
                    case 7 :
                        a7++;
                        break;
                    case 8 :
                        a8++;
                        break;
                    case 9 :
                        a9++;
                        break;
                    default:
                        a10++;
                        break;
                }
                //1  3  6   10  15  21  28  36  45 ...
                 a = a +i;// 1 + 2
            }
            //分别输出圆圈对应的按到的数字
            System.out.println("圆圈1  = " + a1 + "" );
            System.out.println("圆圈2  = " + a2 + "" );
            System.out.println("圆圈3  = " + a3 + "" );
            System.out.println("圆圈4  = " + a4 + "" );
            System.out.println("圆圈5  = " + a5 + "" );
            System.out.println("圆圈6  = " + a6 + "" );
            System.out.println("圆圈7  = " + a7 + "" );
            System.out.println("圆圈8  = " + a8 + "" );
            System.out.println("圆圈9  = " + a9 + "" );
            System.out.println("圆圈10  = " + a10 + "" );
    
    
            for (int i = 0; i < 10; i++) {
                
            }
    题:假设小明有100块钱,这时候小明去超市买可乐,可乐3块钱一瓶,
             超市卖家每次卖给小明一瓶可乐,就比原来的贵2/3的价钱,
            小明的瓶子每一个瓶子可以换半瓶可乐(只有半瓶换不出来),问小明最多可以在该超市中买走多少瓶可乐?
        解题思路:
            从可乐价钱切入,只能一瓶一瓶的买
            第一瓶:3元
            第二瓶:3*(1+2.0/3.0)
            第三瓶:3*(1+2.0/3.0)*(1+2.0/3.0)
            ....
            第n瓶:3*(1+2.0/3.0)^(n-1)
            an = an-1 * (1+2.0/3.0)
    
    
    
      int count = 0; // 定义购买的总瓶数
            double price = 3;//定义可乐初始的价钱  初始值为3
            double money = 100; //定义身上剩余的钱数  初始值为100
            double coefficient = 2.0 / 3.0;//定义可乐价格增长的系数
            // 循环次数不确定  推荐使用while循环  循环语句结构中的第二种基本结构
            while (money >= price) {// money >= price 是否进入下次购买
                count++;// 购买的瓶数自增1
                //每两瓶个空瓶子就可以兑换一瓶可乐  count % 2 ==0
                if (count % 2 == 0) {
                    count++;//每两个空瓶子就可以兑换1瓶可乐  总数累加1
    
                }
                //身上剩余的钱数 = 剩下总钱数 - 购买可乐的价钱
                money = money - price;
                //可乐的价钱
                price = price * (1 + coefficient);//
            }
            //输出可以购买的可乐的瓶数
            System.out.println(count);
    
    
  • 相关阅读:
    jsoup使用选择器语法来查找元素
    获取MD5值
    MD5
    反射机制的实现代码
    struts
    spring
    Hibernate
    商品信息录入
    extjs
    EasyUI
  • 原文地址:https://www.cnblogs.com/rxqq/p/13842252.html
Copyright © 2020-2023  润新知