有关鸡兔同笼问题

时间:2021-11-23 11:22:43
#include<stdio.h>
int main()
{ int n[50],m[50],i=0,j,k;\\j,k为鸡和兔
while(scanf("%d %d"),&n[i],&m[i])
{if(n[i]==0||m[i]==0)
break;
i++;
}
i=0; 
while(m[i]!=0&&n[i]!=0)
{ for(j=0;j<=n[i];j++)
{ k=n[i]-j;
if(n[i]==j+k&&m[i]==2*j+4*k)
break;
}
if(n[i]==j+k&&m[i]==2*j+4*k)
printf("%d %d\n",j,j);
else
printf("Error");
i++;
}

return 0;
 } 
为什么程序仅有一遍输入,而且没结果。

2 个解决方案

#1


有几处错误改正后,如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>


int main()
{
int n[50], m[50], i = 0, j, k; //j,k为鸡和兔
while (i<50)
{
scanf("%d%d", &n[i], &m[i]);
if (n[i] == 0 || m[i] == 0)
break;
i++;
}
i = 0;
while (i<50)
{
for (j = 0; j <= n[i]; j++)
{
k = n[i] - j;
if (n[i] == j + k&&m[i] == 2 * j + 4 * k)
break;
}
if (n[i] == j + k&&m[i] == 2 * j + 4 * k)
printf("%d %d\n", j, k);
else
printf("Error");
i++;
}




return 0;
}
/*
“鸡兔同笼问题”是我国古算书《孙子算经》中著名的数学问题,
其内容是:“今有雉(鸡)兔同笼,上有三十五头,下有九十四足。
问雉兔各几何。” 意思是:有若干只鸡和兔在同个笼子里,从上面数,
有三十五个头;从下面数,有九十四只脚。求笼中各有几只鸡和兔?
《孙子算经》用算术方法来解:脚数的1/2减头数,即94/2-35=12为兔数;
头数减兔数即35-12=23为鸡数。这种解法虽然直接而自然,也很合乎逻辑,
但是却不容易理解。知道孙子是如何解答这个“鸡兔同笼”问题的吗?
原来孙子提出了大胆的设想。他假设砍去每只鸡和每只兔1/2的脚,
则每只鸡就变成了“独脚鸡”,而每只兔就变成了“双脚兔”。
这样,“独脚鸡”和“双脚兔”的脚就由94只变成了47只;而每只“鸡”的
头数与脚数之比变为1:1,每只“兔”的头数与脚数之比变为1:2。由此可知,
有一只“双脚兔”,脚的数量就会比头的数量多1。所以,“独脚鸡”和
“双脚兔”的脚的数量与他们的头的数量之差,就是兔子的只数。
*/

#2


#include<stdio.h>
int main()
{
    int n[50],m[50],i=0,j,k; //j,k为鸡和兔
    while(2 == scanf("%d %d",&n[i],&m[i]) && i < 50)
    {
        if(n[i] == 0|| m[i] == 0)
            break;
        i++;
    }

    i = 0;
    while (n[i] != 0 || m[i] != 0) {
        for (j = 0; j < n[i]; j++) {
            k = n[i]-j;
            if (n[i] == j + k && m[i] == 2*j+4*k)
                break;
        }
        if(n[i] == j + k && m[i] == 2*j+4*k)
            printf("%d %d\n",j, k);
        else
            printf("Error\n");
i++;
    }
    return 0;
}

#1


有几处错误改正后,如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>


int main()
{
int n[50], m[50], i = 0, j, k; //j,k为鸡和兔
while (i<50)
{
scanf("%d%d", &n[i], &m[i]);
if (n[i] == 0 || m[i] == 0)
break;
i++;
}
i = 0;
while (i<50)
{
for (j = 0; j <= n[i]; j++)
{
k = n[i] - j;
if (n[i] == j + k&&m[i] == 2 * j + 4 * k)
break;
}
if (n[i] == j + k&&m[i] == 2 * j + 4 * k)
printf("%d %d\n", j, k);
else
printf("Error");
i++;
}




return 0;
}
/*
“鸡兔同笼问题”是我国古算书《孙子算经》中著名的数学问题,
其内容是:“今有雉(鸡)兔同笼,上有三十五头,下有九十四足。
问雉兔各几何。” 意思是:有若干只鸡和兔在同个笼子里,从上面数,
有三十五个头;从下面数,有九十四只脚。求笼中各有几只鸡和兔?
《孙子算经》用算术方法来解:脚数的1/2减头数,即94/2-35=12为兔数;
头数减兔数即35-12=23为鸡数。这种解法虽然直接而自然,也很合乎逻辑,
但是却不容易理解。知道孙子是如何解答这个“鸡兔同笼”问题的吗?
原来孙子提出了大胆的设想。他假设砍去每只鸡和每只兔1/2的脚,
则每只鸡就变成了“独脚鸡”,而每只兔就变成了“双脚兔”。
这样,“独脚鸡”和“双脚兔”的脚就由94只变成了47只;而每只“鸡”的
头数与脚数之比变为1:1,每只“兔”的头数与脚数之比变为1:2。由此可知,
有一只“双脚兔”,脚的数量就会比头的数量多1。所以,“独脚鸡”和
“双脚兔”的脚的数量与他们的头的数量之差,就是兔子的只数。
*/

#2


#include<stdio.h>
int main()
{
    int n[50],m[50],i=0,j,k; //j,k为鸡和兔
    while(2 == scanf("%d %d",&n[i],&m[i]) && i < 50)
    {
        if(n[i] == 0|| m[i] == 0)
            break;
        i++;
    }

    i = 0;
    while (n[i] != 0 || m[i] != 0) {
        for (j = 0; j < n[i]; j++) {
            k = n[i]-j;
            if (n[i] == j + k && m[i] == 2*j+4*k)
                break;
        }
        if(n[i] == j + k && m[i] == 2*j+4*k)
            printf("%d %d\n",j, k);
        else
            printf("Error\n");
i++;
    }
    return 0;
}