函数题:鸡兔同笼问题
《孙子算经》记载:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”
#### 函数原型
c
int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);
说明:head 和 foot 为头和脚的数量,chicken 和 rabbit 为指示鸡和兔数量的指针。若问题有解,则将鸡和兔的数量保存到 chicken 和 rabbit 所指示的变量中,函数值为 1(真);否则不改变 chicken 和 rabbit 所指示的变量,函数值为 0(假)。
#### 裁判程序
c
#include <stdio.h>
int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);
int main()
{
int h, f, c, r;
scanf("%d%d", &h, &f);
if (ChickenRabbit(&c, &r, h, f))
{
printf("%d %d\n", c, r);
}
else
{
puts("None");
}
return 0;
}
/* 你的提交代码将被嵌在这里 */
#### 输入样例1
in
35 94
#### 输出样例1
out
23 12
#### 输入样例2
in
30 71
#### 输出样例2
out
None
答案:若无答案欢迎评论
设头和脚的数量分别为 $$h$$、$$f$$,鸡和兔的数量分别为 $$c$$、$$r$$,则
$$c + r = h$$
$$2c + 4r = f$$
解方程组,得
$$c = 2h - f / 2$$
$$r = f / 2 - h$$
需要注意的是:
(1) $$f$$ 为偶数
(2) 全为兔数时,$$f$$ 最多为 $$4h$$
(3) 全为鸡数时,$$f$$ 最少为 $$2h$$
#### 参考答案
c
int ChickenRabbit(int *chicken, int *rabbit, int head, int foot)
{
int ok = foot % 2 == 0 && foot >= 2 * head && foot <= 4 * head;
if (ok)
{
*rabbit = foot / 2 - head;
*chicken = head - *rabbit;
}
return ok;
}
#### 函数原型
c
int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);
说明:head 和 foot 为头和脚的数量,chicken 和 rabbit 为指示鸡和兔数量的指针。若问题有解,则将鸡和兔的数量保存到 chicken 和 rabbit 所指示的变量中,函数值为 1(真);否则不改变 chicken 和 rabbit 所指示的变量,函数值为 0(假)。
#### 裁判程序
c
#include <stdio.h>
int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);
int main()
{
int h, f, c, r;
scanf("%d%d", &h, &f);
if (ChickenRabbit(&c, &r, h, f))
{
printf("%d %d\n", c, r);
}
else
{
puts("None");
}
return 0;
}
/* 你的提交代码将被嵌在这里 */
#### 输入样例1
in
35 94
#### 输出样例1
out
23 12
#### 输入样例2
in
30 71
#### 输出样例2
out
None
答案:若无答案欢迎评论
设头和脚的数量分别为 $$h$$、$$f$$,鸡和兔的数量分别为 $$c$$、$$r$$,则
$$c + r = h$$
$$2c + 4r = f$$
解方程组,得
$$c = 2h - f / 2$$
$$r = f / 2 - h$$
需要注意的是:
(1) $$f$$ 为偶数
(2) 全为兔数时,$$f$$ 最多为 $$4h$$
(3) 全为鸡数时,$$f$$ 最少为 $$2h$$
#### 参考答案
c
int ChickenRabbit(int *chicken, int *rabbit, int head, int foot)
{
int ok = foot % 2 == 0 && foot >= 2 * head && foot <= 4 * head;
if (ok)
{
*rabbit = foot / 2 - head;
*chicken = head - *rabbit;
}
return ok;
}