当前位置: 代码迷 >> J2SE >> 求赐教…
  详细解决方案

求赐教…

热度:114   发布时间:2016-04-24 00:19:59.0
求指教……
1)5文钱买一只公鸡,3文钱买一只母鸡,1文钱买3只小鸡,现在用100文钱买100只鸡,求公鸡、母鸡、小鸡各多少只 用二重循环实现
2)编个ATM机取款的程序,ATM机只能输出100元的纸币,一次取钱最低0元,最高1000元,如果客户输入的金额符合上述要求,则打印输出用户取的钱数。 此题如何用二循环做出

------解决方案--------------------
Java code
package com.test;public class Test {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        for(int a=0;a<20;a++){             for(int b=0;b<33;b++){             if((a*5+b*3+(100-(a+b))/3)==100&&(100-(a+b))%3==0){             System.out.println("公鸡:"+a+"母鸡:"+b+"小鸡:"+(100-(a+b)));                          }             }            }    }}公鸡:0母鸡:25小鸡:75公鸡:4母鸡:18小鸡:78公鸡:8母鸡:11小鸡:81公鸡:12母鸡:4小鸡:84
------解决方案--------------------
百钱百鸡解法:

设买公、母、小鸡个数分别为x,y,z,由题目得方程组:
5*x+3*y+z/3=100
x+y+z=100
代入消z:
15*x+9*y+(100-x-y)=300
=>
7*x+4*y=100
因7与4互质且100、4*y都是4的倍数易知x为4的倍数,设x=4*i
由于4*y>=0,得到:
28*i<=100
之后程序就可以写出来了:
Java code
    public static void main(String args[]) {        for(int i=0;i<4;i++) {  // 由于100/28≈3.57,即i可取0,1,2,3,所以这里直接写循环条件为i<4            int x=4*i;            int y=(100-7*x)/4;            int z=100-x-y;                        System.out.printf("公鸡:%4d,母鸡:%4d,小鸡:%4d\n",x,y,z);        }    }计算结果:公鸡:   0,母鸡:  25,小鸡:  75公鸡:   4,母鸡:  18,小鸡:  78公鸡:   8,母鸡:  11,小鸡:  81公鸡:  12,母鸡:   4,小鸡:  84
------解决方案--------------------
百钱百鸡的原题还有一个需求:公鸡、母鸡、小鸡数都不能为0。只需把x、y、z中有0的解抛掉即可:
Java code
    public static void main(String args[]) {        for(int i=0;i<4;i++) {  // 由于100/28≈3.57,即i可取0,1,2,3,所以这里直接写循环条件为i<4            int x=4*i;            int y=(100-7*x)/4;            int z=100-x-y;                        if(x>0&&y>0&&z>0)                System.out.printf("公鸡:%4d,母鸡:%4d,小鸡:%4d\n",x,y,z);        }    }计算结果:公鸡:   4,母鸡:  18,小鸡:  78公鸡:   8,母鸡:  11,小鸡:  81公鸡:  12,母鸡:   4,小鸡:  84
  相关解决方案