代码改变世界

【慢慢学算法】:百鸡问题

2012-05-04 14:44  ATP_  阅读(2685)  评论(8编辑  收藏  举报
   题目描述:   

    用小于等于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 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int main()
 5     {
 6     int n;
 7     while(cin >> n)
 8     {
 9         for(int i = 0; i <= 100; i++)
10         for(int j = 0; j <= 100; j++)
11         {
12             if((14 * i + 8 * j) <= n * 3 - 100)
13             printf("x=%d,y=%d,z=%d\n",i,j,100-i-j);
14             else
15             break;
16         }
17     }
18     return 0; 
19     }

   收获:   

1. C++的cout输出比C中的printf慢!!!在这个题目中分别为10ms和50ms...

   2. 优先将题目转化为数学问题进行化简解决,然后在通过程序实现,不要一上来就闷头写代码。

     3. 方程中的未知数可以在程序中拿穷举来解决