C++ | 作业 | 百钱买百鸡
题目:公鸡一只5块,母鸡一只3块,小鸡三只1块,用100块买100只鸡,问有哪些买法
循环语句
问题分析
用枚举法,通过循环 (循环语句) ,然后逐个加1去试,如果某次满足题目要求 (判断语句) ,就输出当前的数值。
循环语句可以写为
1 | while ( 鸡数量 <= 100) |
判断是否符合题意:
- 一共100只鸡:
公鸡+母鸡+小鸡 == 100
- 一共花100块:
公鸡*5 + 母鸡*3 + 小鸡/3 == 100
- !!!很重要,因为整数除以三如果除不开,会舍去小数部分保留整数,这样会导致出现错误的答案,所以还应该保证小鸡数量能被3整除,即
小鸡%3 == 0
题目需要全部符合,所以以上三条之间用
&&
连接。1
2
3
4if ((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 |
|
很明显这种方法有很多次尝试都是多余的(比如很多次枚举中鸡的数目总数大于了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 |
|
程序输出结果
1 | 公鸡: 0 |