练习:22

这也是道难题,难到我了。。。另外的一道难题是:练习:15 。

原题:

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

利用for循环实现

提示:

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

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

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

思路:

  1. 使用嵌套for循环结构;
  2. 定义循环变量i(i<30)和j(j<30);
  3. 设定:men=i;在第二个for循环结构中定义:women=kids;
  4. 定义kids的值,具体公式为:kids=(30-men-women);
  5. 定义公式: 3*men+2*women+kids=50
  6. 使用if选择结构判断当总先令等于50时,输出相应公式

参考源代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 * 思路:使用两层嵌套for循环
 * 将i的值设为小于总人数30,并且将男人的数量与i相等
 * 同理,j的值等于女人的数量。
 * 用运算公式表达小孩的数量等于30减男人再减女人(注意括号的使用!)
 * 使用if判断总分数是否等于50,若等于50输出正确,否则输出错误!
 */
public class P142_4{
    public static void main (String[]args){
        int men,women,kids,money ;//变量一次是:男人,女人,小孩,花的先令之和
            for ( int i = 1 ;i <30 ;i++ ){ //定义i的值小于总人数30
                men = i ;//定义男人的数量等于i
                for ( int j  = 1; j <30;j++){//定义j的值小于总人数30
                    women = j;//定义女人的数量等于j
                    kids = (30- men - women ); //这步很重要!!!定义小孩的数量,注意括号的使用!!
                  money = men*3 + women*2 +kids ;//计算花费的先令总数
                    if ( money == 50 ){//当花费的先令总数等于50时,输出正确的数值
                        System.out.println("****************");
                        System.out.println("男人的数量是:"+men+"\t女人的数量是:"+women+"\t小孩的数量是:"+kids);
                        System.out.println("先令总额"+"3*"+men+"+2*"+women+"+"+kids+"=50");
                        System.out.println("总人数:");
                        System.out.println(men+women+kids);
                    }    
            }
    }
   System.out.println("程序结束!");
}
}