百钱买百鸡

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Test7{
public static void main(String[] args){
for(int i=0;i<=33;i++){//此循环表示100文钱买鸡,公鸡的数量,最多33只
for(int j=0;j<=50;j++){//此循环表示100文钱买鸡,母鸡的数量,最多50只
//剩余可买数量%3==0 公鸡母鸡已用的钱+剩余小鸡/3(买小鸡花的钱)==100

if((100-i-j)%3==0 && ((i*3+j*2)+(100-i-j)/3==100)){
System.out.print("\n公鸡数量:"+i+"\t母鸡数量:"+j+"\t小鸡数量:"+(100-i-j));
}
/*或者另一个写法
int k = 100-i-j;//鸡的总数为100只,100-公鸡数量-母鸡数量,余下为小鸡数量
//如果小鸡的数量不是3的倍数,跳过此次计算,因为3只小鸡才够1文钱
if( k%3!=0 )continue;
//如果公鸡+母鸡+小鸡==100只 并且 公鸡钱数+母鸡钱数+小鸡钱数==100,满足条件
if( i+j+k==100 && i*3+j*2+k/3==100 )
System.out.println("公鸡:"+i+" 母鸡:"+j+" 小鸡:"+k);
*/

}
}
}
}

if语句分析:

条件一、(100-i-j)%3==0 :减去公鸡母鸡数量得到剩余可买的鸡的数量然后检查是否被3整除,是则为剩余小鸡数量

条件二、((i3+j2)+(100-i-j)/3==100) :(i3+j2)为已买公鸡母鸡所使用掉的钱数,(100-i-j)/3为购买剩余小鸡所需要的钱数,这两者相加是否等于100

当这两个条件都满足时,则if语句为true执行输出语句。

结果:

1
2
3
4
5
6
公鸡数量:0     母鸡数量:40    小鸡数量:60
公鸡数量:5 母鸡数量:32 小鸡数量:63
公鸡数量:10 母鸡数量:24 小鸡数量:66
公鸡数量:15 母鸡数量:16 小鸡数量:69
公鸡数量:20 母鸡数量:8 小鸡数量:72
公鸡数量:25 母鸡数量:0 小鸡数量:75

36块砖,36人搬,男搬4,女搬3,两个小孩抬一砖,要求一次全搬完,问男、女和小孩各若干?

该题和“百钱买百鸡”是同样的道理

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Test6{
public static void main(String[] args){
for (int i = 0; i <= 9; i++) {//此循环表示搬36块砖时,男人的数量,最多9名
for (int j = 0; j <= 12; j++) {//此循环表示搬36块砖时,女人的数量,最多12名
/*

*/
if ((36 - i - j)%2 == 0 && (4 * i + 3 * j +(36 - i - j) / 2 == 36)) {
System.out.println("男" + i + "个,女" + j + "个,小孩" + (36 - i - j) + "个。");
System.out.println("人多力量大×\n小孩多力量大√");
}
}
}
}
}

if语句问题解析

1、(36 - i - j)%2==0 :(36-i-j)为剩余小孩数,因为俩小孩搬一块砖块,所以2模运算确保剩余的小孩数可以每两人1砖
2、(4 * i + 3 * j +(36 - i - j) / 2 == 36) :4i+3j:为男人女人已经搬了的砖块数,(36 - i - j) / 2:总人数减去男人女人的数量,剩余的数量就是小孩的数量,又因为每一块砖需要俩小孩去搬,所以剩余人数除2就是剩余小孩的数量可以搬的砖块数,故已搬砖块数+剩余人数可搬砖块数==36时为真
3、结果剩余小孩人数为偶数 && 已搬砖块数+剩余人数可搬砖块数==36