前言
题目
题目描述: 用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。 输入: 测试数据有多组,输入n。 输出: 对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。 样例输入: 40 样例输出: x=0,y=0,z=100 x=0,y=1,z=99 x=0,y=2,z=98 x=1,y=0,z=99
解题思路
- x,y的取值范围,假设x为大鸡,y为中鸡,很多人可能直接判断条件就是0 <= x <= 100 || 0 <= y <=100,其实咱都学过数学或者有过实际买东西的经验,买东西的时候是跟实际的金钱挂等号的,而不是跟你的购物欲望划等号。所以这里的x和y的取值应该是 0 <= x <= (int)(money / 5) || 0 <= y <=(int)(money/3)
- 因为我定义的x,y,z都为整形,所以判断条件时候需要等号两边都*3
AC代码
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int x, y, z, n; while(scanf("%d", &n) != EOF) { for(x = 0; x <= (int)(n / 5); x ++) { for(y = 0; y < (int)(n / 3); y ++) { z = 100 - x - y; if((15 * x + 9 * y + z <= n * 3) && z >= 0) printf("x=%d,y=%d,z=%d\n", x, y, z); } } } return 0; }