前言

虽然感觉这到题目很水,但是看到浏览量这么高,我还是适当的调整一下布局吧,通过页面的源码进行调整,因为csdn的博客编辑功能太弱了,必须手动添加<br>等标签,不然无法识别

题目

题目描述:
    用小于等于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


解题思路

  1. x,y的取值范围,假设x为大鸡,y为中鸡,很多人可能直接判断条件就是0 <= x <= 100 || 0 <= y <=100,其实咱都学过数学或者有过实际买东西的经验,买东西的时候是跟实际的金钱挂等号的,而不是跟你的购物欲望划等号。所以这里的x和y的取值应该是 0 <= x <= (int)(money / 5) || 0 <= y <=(int)(money/3)
  2. 因为我定义的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;
}