C++ | 作业 | 百钱买百鸡

题目:公鸡一只5块,母鸡一只3块,小鸡三只1块,用100块买100只鸡,问有哪些买法
循环语句

问题分析

用枚举法,通过循环 (循环语句) ,然后逐个加1去试,如果某次满足题目要求 (判断语句) ,就输出当前的数值。

循环语句可以写为

1
2
3
4
5
while ( 鸡数量 <= 100)
{

鸡数量++;
}

判断是否符合题意:

  1. 一共100只鸡: 公鸡+母鸡+小鸡 == 100
  2. 一共花100块: 公鸡*5 + 母鸡*3 + 小鸡/3 == 100
  3. !!!很重要,因为整数除以三如果除不开,会舍去小数部分保留整数,这样会导致出现错误的答案,所以还应该保证小鸡数量能被3整除,即 小鸡%3 == 0

    题目需要全部符合,所以以上三条之间用 && 连接。

    1
    2
    3
    4
    if ((cock * 5 + hen * 3 + chicken / 3 == 100) && (cock + hen + chicken == 100) && chicken % 3 == 0)
    {
    ......
    }

代码解决

循环嵌套三层,先是公鸡母鸡为0,小鸡从1试到100,每次判断是否符合题意,如果符合就输出数量。
然后公鸡是0,母鸡是1,小鸡再从1试到100,每次判断是否符合
母鸡类似的从1试到100,再让公鸡1试到100。
这样一共试了100 * 100 * 100次,当中符合题意的输出出来

列表可表示为:

公鸡 母鸡 小鸡
0 0 0
0 0 1
0 0
0 0 100
0 1 0-100
0 2 0-100
0 0-100
0 100 0-100
100 100 100

代码:

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
#include <iostream>
using namespace std;

int main()
{
int cock = 0, hen = 0, chicken = 0;
while (cock <= 100)
{
while (hen <= 100)
{
while (chicken <= 100)
{
if ((cock * 5 + hen * 3 + chicken / 3 == 100) && (cock + hen + chicken == 100) && chicken % 3 == 0)
{
cout << "公鸡: " << cock << endl << "母鸡: " << hen << endl << "小鸡: " << chicken << endl << endl;
}
chicken++;
}
chicken = 0;
hen++;
}
hen = 0;
cock++;
}

return 0;
}

很明显这种方法有很多次尝试都是多余的(比如很多次枚举中鸡的数目总数大于了100),而且嵌套了三层的循环,可以简化,参考方法二

一开始令公鸡母鸡都是0,然后只用两层循环,先试母鸡,每次让 小鸡数量=100-公鸡-母鸡 ,这样可以简化代码,减少不必要的错误尝试。

列表可表示为:

公鸡 母鸡 小鸡
0 0 100
0 1 99
0
0 100 0
1 0 99
1 1 98
1
1 99 0
100 0 0

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;

int main()
{
int cock = 0, hen = 0, chicken = 0;
while (cock <= 100)
{
while (hen <= 100)
{
chicken = 100 - cock - hen;
if ((cock * 5 + hen * 3 + chicken / 3 == 100) && (cock + hen + chicken == 100) && chicken % 3 == 0)
{
cout << "公鸡: " << cock << endl << "母鸡: " << hen << endl << "小鸡: " << chicken << endl << endl;
}
hen++;
}
hen = 0;
cock++;
}

return 0;
}

程序输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
公鸡: 0
母鸡: 25
小鸡: 75

公鸡: 4
母鸡: 18
小鸡: 78

公鸡: 8
母鸡: 11
小鸡: 81

公鸡: 12
母鸡: 4
小鸡: 84