百钱买百鸡
About 743 wordsAbout 2 min
C++班级内部资料
2023-10-27
题目:公鸡一只5块,母鸡一只3块,小鸡三只1块,用100块买100只鸡,问有哪些买法 循环语句
问题分析
用枚举法,通过循环 (循环语句) ,然后逐个加1去试,如果某次满足题目要求 (判断语句) ,就输出当前的数值。
循环语句可以写为
while ( 鸡数量 <= 100)
{
鸡数量++;
}
判断是否符合题意:
- 一共100只鸡:
公鸡+母鸡+小鸡 == 100
- 一共花100块:
公鸡*5 + 母鸡*3 + 小鸡/3 == 100
- !!!很重要,因为整数除以三如果除不开,会舍去小数部分保留整数,这样会导致出现错误的答案,所以还应该保证小鸡数量能被3整除,即
小鸡%3 == 0
题目需要全部符合,所以以上三条之间用
&&
连接。
if ((cock * 5 + hen * 3 + chicken / 3 == 100) && (cock + hen + chicken == 100) && chicken % 3 == 0)
{
......
}
代码解决
Solution 1
循环嵌套三层,先是公鸡母鸡为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 |
代码:
#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),而且嵌套了三层的循环,可以简化,参考方法二
Solution 2
一开始令公鸡母鸡都是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 |
代码:
#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;
}
程序输出结果
公鸡: 0
母鸡: 25
小鸡: 75
公鸡: 4
母鸡: 18
小鸡: 78
公鸡: 8
母鸡: 11
小鸡: 81
公鸡: 12
母鸡: 4
小鸡: 84