函数实现类似百钱百鸡问题
通过课程进入 | 题 号: | 343 | 函数实现类似百钱百鸡问题 | 语言要求: | C++ |
函数求百钱百鸡问题的变形: 原百钱百鸡问题如下: 一只公鸡值5钱, 一只母鸡值3钱, 三只小鸡值1钱, 现在用百钱买百鸡, 请问公鸡、母鸡、小鸡各多少只? 现修改要求,实现下面的函数: int howMany(int money,int m,int cockMoney,int henMoney,int chickenMoney,int *cockNum,int *henNum,int *chickenNum); 函数功能:根据输入的总的价钱money, 总的鸡的数量m,每种鸡的价格, 求满足要求的各种鸡的数量。 如果函数有解,只需要求出其中一个解即可。 输入参数: int money: 总共花的钱数 int m:总的鸡的数量 int cockMoney:1只公鸡的价格 int henMoney:1只母鸡的价格 int chickenMoney:一只小鸡的价格 输出参数: int *cockNum:公鸡数量 int *henNum:母鸡数量 int *chickenNum:小鸡数量 函数返回值:有解返回1,无解返回0,输入参数不合法,返回-1 |
int howMany(int money, int m, int cockMoney, int henMoney, int chickenMoney, int *cockNum, int *henNum, int *chickenNum) {
if(money <= 0 || m <= 0 || cockMoney <= 0 || henMoney <= 0 || chickenMoney <= 0) {
return -1; //输入参数不合法,返回-1
}
int cock = 0; //公鸡数量
int hen = 0; //母鸡数量
int chicken = 0; //小鸡数量
for(cock = 0; cock <= money / cockMoney && cock <= m; cock++) { //枚举公鸡数量
for(hen = 0; hen <= money / henMoney && (cock + hen) <= m; hen++) { //枚举母鸡数量
chicken = m - cock - hen; //根据总鸡数求出小鸡数量
if(cock * cockMoney + hen * henMoney + chicken * chickenMoney == money && chicken % 3 == 0) { //如果价格总和符合要求且小鸡数量是3的倍数
*cockNum = cock;
*henNum = hen;
*chickenNum = chicken;
return 1; //有解,返回1
}
}
}
return 0; //无解,返回0
}
函数主要采用了暴力枚举的方法,先枚举公鸡数量,再枚举母鸡数量,最后要根据总鸡数计算小鸡数量,再判断是否符合条件。函数返回值为1时表示有解,函数返回值为0时表示无解,函数返回值为-1时表示输入参数不合法。公鸡、母鸡、小鸡的数量保存在函数的输出参数中。