题意:
已知有三种铅笔:四分一支的,一分两支的,一分四支的。
现给一个整数N(1 <= N <= 256),问用N分钱买N支铅笔的方法(每支铅笔至少买一支)。
按照第一种铅笔的递增顺序输出所有解。
思路:
根据题意列出方程组
4x + 0.5y + 0.25z = N ----> 16x + 2y = 4N - z ----> z是偶数
x + y + z = N ----> x + y = N - z
----> x = (n + z / 2) / 7;
由于x 随z 递增,所以从 2 ----------> 4N 枚举z ,输出所有可能的解即可。
代码:
#include <cstdio>
int n, Case = 0, x, y, z;
bool sol;
int main()
{
while (scanf("%d", &n), n)
{
sol = false;
printf("Case %d:\n", ++ Case);
printf("%d pencils for %d cents\n", n, n);
for (z = 2; z < 4*n; z += 2)
{
if ((n+z/2) % 7 == 0)
{
x = (n+z/2)/7;
y = n-x-z;
if (x > 0 && y > 0)
{
if (!sol) sol = true;
else printf("\n");
printf("%d at four cents each\n", x);
printf("%d at two for a penny\n", y);
printf("%d at four for a penny\n", z);
}
}
}
if (!sol) printf("No solution found.\n");
printf("\n");
}
}