题解 | #百鸡问题#
百鸡问题
https://www.nowcoder.com/practice/01d161052db64c249a47fc723b4fd5db
#include <iostream> using namespace std; int main() { int a; while (scanf("%d",&a)!=EOF) { for (int i = 0 ; i <= 100; i++) { for (int j = 0 ; j <= 100- i ; j++) { if ((100-i-j)+ i*5*3 + j*3*3 <= a*3 ) { printf("x=%d,y=%d,z=%d\n",i,j,100-i-j); } } } } }
用三重循环可以比较简单地做出来,需要注意的错误点是:
- 面对含有浮点数的比较,只要对浮点数做一个(double)的说明就可以
if(x*5+y*3+(100-x-y)* ((double)1/3) <=n)……
需要注意的改进点是
- 少用一个循环
在用for分别假定i,j即大鸡,小鸡的数目后,可以用 100 - x - y
来表示小小鸡的数目 但是注意这样就必须限制 0 < i < 100 , 0 < j < 100 - i , 0 < k < 100 - i - j来保证不会买多了鸡
当然,也可以直接多加一个 i+j+k ==100
- 对于数目不大的浮点数,将其转换为整型
即将算数式两边的数字都扩大到可以用整型表示的程度。
x*5+y*3+(100-x-y)* ((double)1/3) <=n 变为 x*5 *3+ y*3 *3 + z*1 <= n*3