日期:2014-05-20  浏览次数:20818 次

思路不对,求高手
原题:

在马克思手稿中有一道趣味的数学问题:一共有30个人,可能包括男人,女人和小孩。他们在一家饭馆吃饭共花了50先令,其中每个男人花了3先令,每个女人花2先令,每个小孩花1先令。请问:女人和男人,小孩分别是几个人,请编写一个程序来计算。

利用for循环实现

提示:

定义三个变量men , women 和 kids 分别表示男人数,女人数和小孩数,可以得到如下两个关系:

men+ women+kids = 30 ; 3*men+2*women+kids=50

男人数i的范围是0<=men<=10,利用for循环实现.

========================================================

我的思路:

让men,women进入循环,将kids直接嵌入表达式,使其的值为:总人数-(men+women),在分数的循环上,因kids不用乘以任何数,因此也符合其不用进入循环。

【这个思路是错的,因为写出来的代码根本不对】

我的代码:

Java code
/*
 * 错误。。。待纠正
 */
public class P142_4{
    public static void main (String[]args){
        int men =0 ;
        int women=0;
        int kids=0;
        int a = women+kids;
            for ( int i = 1 ;i <=10 ;i++,men++,kids++ ){
                for ( women = 1; women <=30-(men+kids);women++){
                    int money = men*3 + women*2 +kids ;
                    System.out.println("****************");
                    System.out.println("男人有:"+men);
                    System.out.println("女人有:"+women);
                    System.out.println("小孩有:"+kids);
                    System.out.println("****************");
                    System.out.println("分数是:"+money);
                    int people = men + a ;
                    System.out.println("****************");
                    System.out.println("人数是:"+people);
                if ( people == 30 && money==50 ){
                    System.out.println("男人有:"+men);
                    System.out.println("女人有:"+women);
                    System.out.println("小孩有:"+kids);
                    break;}
            }
            }
            System.out.println("程序结束!");
    }
}


求高手给思路,顺带给代码。。。谢谢了。

------解决方案--------------------
API(Application Programming Interface),即应用程序编程接口,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
------解决方案--------------------
Java code

int man,woman,kid,jiFen;
for (int i = 1; i <30; i++) {
            man = i;
            for (int j = 1; j < 30; j++) {
                woman = j;
                kid = (30-man-woman);
                jiFen = man*3+woman*2+kid;
                if(jiFen==50){
                    System.out.println(man+"*3 +"+woman+"*2+"+kid+"=50");
                }
            }
        }

------解决方案--------------------
两层就够了。
for ( int i = 0 ;i <=10;i++){
 for(int j= 0;j<=30-3*i;j++){
int count = 3*i+2*j+(30-i-j);
if(count==50){
System.out.println(i+" "+j+" "+(30-i-j));

}
}
------解决方案--------------------
Java code
public class Test21 {

    public static void main(String[] args) {

        for (int man = 0; man < 17; man++) {
            for (int woman = 0; woman < 26; woman++) {
                    if (man * 3 + 2 * woman + (30 - man - woman) == 50) {
                        System.out.println("男人有:" + man);
                        System.out.println("女人有:" + woman);
                        System.out.println("小孩有:" + (30 - man - woman));
                        System.out.println("****************");
                    
                }
            }
        }

        System.out.println("程序结束!");
    }
}