穷举练习


我国古代数学家张邱建在《算经》中出了一道“百钱买白鸡”的问题,题意是这样的:5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。

//百钱白鸡            
    
            for(int cock =0;cock<21;cock++ )      //公鸡cock循环条件,最多20只
                for(int hen =0;hen<34;hen++){       //母鸡hen循环条件,最多33只
                    for(int chick =0;chick<101;chick+=3){    //雏鸡chick循环条件,最多100只,每次循环+3
                        if((cock+hen+chick)== 100 && (cock*5+hen*3+chick/3)==100)  //要同时满足百钱白鸡
                        System.out.println("用100文钱买100只鸡,公鸡:"+cock+"只 "+" 母鸡"+hen+"只 "+" 雏鸡"+chick+"只");
                            }    

错误示范:    注意!题中是一文钱3只雏鸡

            int cock =5;int hen =3;int chick =1;
            for(int t =0; t<100;t+=9 ){
                cock+=5;
                hen+=3;
                chick++;
                t =cock+hen+chick;
                System.out.println("公鸡:"+cock+"只 "+" 母鸡"+hen+"只 "+" 雏鸡"+chick+"只");
                System.out.println("要花费"+t+"钱");
                if(t==99){
                    chick++;
                }
            }            
            System.out.println("用100文钱买100只鸡,公鸡:"+cock+"只 "+" 母鸡"+hen+"只 "+" 雏鸡"+chick+"只");
    
                


题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。

            int a =1;
            for(int y =1;y<=9;y++){
                for(int e =0;e<=9;e++){
                    for(int s =0;s<=9;s++){
                        if ((y*y*y+e*e*e+s*s*s)==(y*100+e*10+s*1)){
                    a++;
                    System.out.println("水仙花数第"+a+"个是"+(y*100+e*10+s));

                        }
                    }
                }
            }

 修改后正确做法:

        for(int a=1;a<=9;a++)            //百位上的数的循环条件
            for(int b=0;b<=9;b++)         //十位上的数的循环条件
                for(int c=0;c<=9;c++){        //个位上的数的循环条件
                    int m=(a*100+b*10+c);      //定义m=循环条件产生的某个三位数
                        int    n=(a*a*a+b*b*b+c*c*c);   //定义n=循环条件产生的各个数的立方和
                        if(m!=n)                //当m!=n的值,表示该数不是水仙花数
                            continue;          //进行下一次循环
                        /*
                         * 也可以写  if(m==n) 直接输出m或者n的值
                         */
                        System.out.println("水仙花数有:"+m);
                }



这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?

//第一种方法:    
for(int x=1;x<100;x++){ //大马x获取从1~100的数 for(int y=1;y<100;y++){ //中马 y int z=100-x-y; //小马z变量 if(z%2==0){ //z值要为偶数,2只小马驼一担 if((3*x+2*y+z/2)==100){ //大马+中马+小马驼货的和 System.out.println("百马百担:大马"+x+"中马"+y+"小马"+z); } } } } //第二种方法: for(int i=0;i<34;i++) //大马最多33匹 for(int j=0;j<51;j++) //中马最多50匹 for(int k=0;k<101;k+=2) //小马驹最多100匹 { if ((i*3+j*2+k/2)==100 & (i+j+k)==100) //判断货物的数量和马的数量,是否=100 System.out.println("百马百担,大马"+i+"匹,中马"+j+"匹,小马"+k+"匹。" ); }

 


 

//错误示范:不要理解错题意
int dm =3;int zm =2;int xm =1; for(int hw =0;hw <=100;hw +=6){ dm +=3; zm +=2; xm ++; hw = dm+zm+xm; System.out.println("大马"+dm+"中马"+zm+"小马"+xm); System.out.println("货物"+hw); }
原文地址:https://www.cnblogs.com/sjxx/p/5103987.html