九度OJ 1045:百鸡问题 (基础题)

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:8410

解决:3644

题目描述:

    用小于等于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
来源:
2009年哈尔滨工业大学计算机研究生机试真题

思路:

朴素的思路,循环求解。

应当以大鸡为主循环,小鸡为次循环,这样减少循环次数。


代码:

#include <stdio.h>
 
int main(void)
{
    unsigned int x, y, z, n;
 
    while (scanf("%d", &n) != EOF)
    {
        for (x = 0; 5*x <= n; x++)
        {
            for (y = 0; 3*y <= n-5*x; y++)
            {
                if (x+y > 100)
                    break;
                z = 100-x-y;
                if (z%3 == 0 && 5*x + 3*y + z/3 <= n
                        || z%3 != 0 && 5*x + 3*y + z/3 < n)
                    printf("x=%d,y=%d,z=%d
", x, y, z);
            }
        }
    }
 
    return 0;
}
/**************************************************************
    Problem: 1045
    User: liangrx06
    Language: C
    Result: Accepted
    Time:10 ms
    Memory:912 kb
****************************************************************/


编程算法爱好者。
原文地址:https://www.cnblogs.com/liangrx06/p/5083986.html