百鸡百钱系列问题

问题描述:

经典问题的描述如下:在市场上,鸡的售价分别是:公鸡3文钱1只,母鸡2文1只,小鸡1文3只。问拿100文钱想买100只鸡,则公鸡、母鸡和小鸡应各买多少只? 现在要解决的问题是:如果鸡的价格保持不变,有人拿钱若干,想使买到的鸡数与钱数相当,问有哪些解决方案。

输入:

输入数据包含一个整数N(10<=N<=10000),表示钱数。

输出:

输出数据需列出满足买到的鸡数与所持钱数相当的所有解,每个解占一行,包含三个整数分别表示要买的公鸡、母鸡和小鸡的数量,用空格分隔。存在多组解的情况下,输出按升序排列(即0 0 1在0 1 0之前)。

输入样例:

10

输出样例:

0 4 6

一般的代码:

 

#include <iostream>
using namespace std;


void Num1(int n)
{
    for(int i=0;(3*i)<=n;i++)
    {
        for(int j=0;(2*j)<=(n-3*i);j++)
        {
            for(int k=0;k<=3*(n-3*i-2*j);k++)
            if(n==(i+j+k)&&n==(k/3+2*j+3*i))
            cout<<i<<" "<<j<<" "<<k<<endl;
        }
    }
}
int main()
{
    int n;
    cin>>n;
    Num1(n);
}

 

比较高效的代码(1):

#include <iostream>
using namespace std;


void Num1(int n)
{
    int k;
    for(int i=0;i<n/3;i++)
    {
        for(int j=0;j<n/2;j++)
        {
            k=n-i-j;
            if((k/3+i*3+j*2)==n&&(k%3==0))
            cout<<i<<" "<<j<<" "<<k<<endl;
        }
    }
}
int main()
{
    int n;
    cin>>n;
    Num1(n);
}

比较高效的代码(2):

 

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int cock,hen,chick;
    int money;
    scanf("%d",&money);
    for(chick=0;chick<=money;chick+=3)
    {
        cock=chick*5/3-money;
        hen=2*money-chick*8/3;
        if(cock+hen+chick==money&&cock>=0&&hen>=0)
        printf("%d %d %d\n",cock,hen,chick);
    }
}

 

  

 

  

 

posted @ 2013-03-15 22:30  再见,少年  Views(328)  Comments(0Edit  收藏  举报