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);

 


 

posted @ 2020-10-19 20:14  wajueji  阅读(387)  评论(0编辑  收藏  举报