百鸡百钱问题 c语言 递归解决 一定是递归!不要用循环!

有没有大佬帮一下忙

为方便计算,把小鸡的价格定义为1,母鸡价格为9,公鸡15,这样可以把问题当作300钱买100鸡了:

#include <stdio.h>
int price[3] = { 15, 9, 1 };
int chicknum[3];
void buychick(int curmoney, int ci) 
{
int max, i;
max = curmoney / price[ci];
for (i = 1; i <= max; ++i)
{
chicknum[ci] = i;
if (2 == ci)
{
if (100 == chicknum[0] + chicknum[1] + chicknum[2])
if (300 == chicknum[0] * price[0] + chicknum[1] * price[1] + chicknum[2] * price[2])
printf("公鸡:%4d   母鸡:%4d  小鸡:%4d\n", chicknum[0], chicknum[1], chicknum[2]);
}
else
buychick(curmoney - chicknum[ci] * price[ci], ci + 1);
}
}
int main()
{
buychick(300, 0);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-17
#include <stdio.h>
#include <stdlib.h>

void calc(int a, int b)
{
    if(a>=20 || b>=33) return;
    int c=100-a-b;
    if(c%3==0 && c/3+5*a+3*b == 100)
    {
        printf("%d %d %d\n",a, b, c);
        exit(0);
    }
    calc(a+1, b);
    calc(a,b+1);
}
int main()
{
    calc(1,1);
    return 0;
}

第2个回答  2017-11-17
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
const int CHICK_KIND = 3;
const int TOTAL_MONEY=300;
const int TOTAL_COUNT=100;

int priceArray[CHICK_KIND]={15,9,1};
int resultArray[CHICK_KIND]={0,0,0};

void calculate(int remain_money,int index);
int main(int argc,char **argv)
{
    calculate(TOTAL_MONEY,0);

    return 0;
}
void calculate(int remain_money,int index)
{
    int time=remain_money/priceArray[index];

    for(int i=0;i<=time;i++)
    {
        resultArray[index]=i;
        if(index==CHICK_KIND-1)
        {
            if(resultArray[0]+resultArray[1]+resultArray[2]==TOTAL_COUNT&&resultArray[0]>0&&resultArray[1]>0&&resultArray[2]>0)
                if(resultArray[0]*priceArray[0]+resultArray[1]*priceArray[1]+resultArray[2]*priceArray[2]==TOTAL_MONEY)
                    cout<<"("<<resultArray[0]<<","<<resultArray[1]<<","<<resultArray[2]<<")"<<endl;
        }
        else
        {
            int remainMoney=remain_money;
            remainMoney=remainMoney-priceArray[index]*resultArray[index];
            calculate(remainMoney,index+1);
        }
    }
}

相似回答