PTA6-1 鸡兔同笼问题 (20分)

6-1 鸡兔同笼问题 (20分)

孙子算经》记载:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”

函数原型
int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);
说明:head 和 foot 是头和脚的数量,chicken 和 rabbit 是指示鸡和兔数量的指针。若问题有解,则将鸡和兔的数量保存到 chicken 和 rabbit 所指示的变量中,函数值为1(真);否则不改变 chicken 和 rabbit 所指示的变量,函数值为0(假)。

#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. 数学函数法( 不推荐)
    这里我们用数学公式来表示鸡兔的个数,最后通过判断公式中求解的值是否为整数来决定输出结果,今天我在PTA 的上机练习中就遇到了这种情况的问题(而老师给我的解释是要考虑的数学情况有很多),比如:
    给定的头的个数不能比脚多;
    当用公式求得的值为负值时便不能正常输出( 属于bug)
    我写的代码如下:
int   ChickenRabbit(int *chicken, int *rabbit, int head, int foot)
{
	int m,n;
    m=(foot-2*head)/2;//相当于数学公式中的运算,可以设m,n来表示
	n=head-m;
 if((foot-2*head)/2==(foot-2*head)*1.0/2)//判断公式计算的值是否为整数
 {
     *rabbit=m;
     *chicken=n;
     
     return 1;
 }
 else
 {     
	return 0;
}
}

2.循环遍历法

int ChickenRabbit(int *chicken, int *rabbit, int head, int foot)
{
	int i;
	for(i=0;i<head;i++)//与上面的区别在于是将兔的个数从0到head逐个试
	{
		if(2*i==(foot-2*head))
		{
	    *rabbit=i;
		*chicken=head-i;
		break;
	    } 
		
	}
	if(i<=head)//另外需要考虑好是由break结束查值还是用<=head来查值
	return 1;
	else
	return 0;
	
 } 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值