鸡兔同笼
鸡兔同笼
时间限制:3000 ms | 内存限制:65535 KB
难度:1
描述
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。
输入
第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10)
a行里,每行都有一个n和m.(0<m,n<100)
输出
输出鸡兔的个数,或者No answer
样例输入
2
14 32
10 16
样例输出
12 2
No answer
#include<stdio.h>
int main()
{
int chicken,n;
scanf("%d",&n);
while(n--)
{int sum,sumfoot;
scanf("%d %d",&sum,&sumfoot);
int m=1;
for(int chicken=1;chicken<=sum;chicken++)
{
if(chicken*2+(sum-chicken)*4==sumfoot)
{
printf("%d %d\n",chicken,sum-chicken);
m=0;
}
}
if(m==1)
{
printf("No answer\n");
}
}
return 0;
}
void fun(int n ,int m)
{
if (n <=0
[解决办法]
m <= 0
[解决办法]
n > m
[解决办法]
m%2 != 0)
{
printf("输入不合法\n");
return ;
}
int nCount = 0;
for (int i = 0; i!= n;++i)
{
if (i*2 + (n-i)*4 == m)
{
printf("鸡:%d 兔:%d\n" ,i ,n - i) ;
nCount++;
}
}
if (nCount == 0)
{
printf("No answer\n" );
}
}
int main()
{
int n ,m;
printf("请输入个数和总腿数:");
scanf("%d%d" ,&n ,&m);
fun(n,m);
return 0;
}
/**
* @file legs.c
* @brief 鸡兔同笼
*/
#include <stdio.h>
/**
* @brief 二元一次方程求解
*
* 二元一次方程:
* ax + by + c = 0
* dx + ey + f = 0
* 解为:
* x = (bf - ec)/(ea - bd)
* y = (af - dc)/(db - ae)
*
* @param x 未知数x
* @param y 未知数y
* @param a 方程一系数
* @param b 方程一系数
* @param c 方程一系数
* @param d 方程二系数
* @param e 方程二系数
* @param f 方程二系数
*
* @retval 0-成功
* @retval -1-失败
*/
int calc(int *x, int *y, int a, int b, int c, int d, int e, int f)
{
if (e * a - b * d != 0 && d * b - a * e != 0) {
*x = (b * f - e * c) / (e * a - b * d);
*y = (a * f - d * c) / (d * b - a * e);
return 0;
} else {
return -1;
}
}
/**
* @brief 鸡兔同笼求解
*
* 利用二元一次方程
* x + y = n
* 4x + 2y = m
*
* @param x 兔子
* @param y 鸡
* @param m 腿数
* @param n 只数
*
* @return
*/
int legs(int *x, int *y, int m, int n)
{
int a, b, c, d, e, f;
a = 1, b = 1, c = -n;
d = 4, e = 2, f = -m;
if (calc(x, y, a, b, c, d, e, f) == 0) {
/* 保证只数为非负整数 */
if (*x + *y == n && *x * 4 + *y * 2 == m
&& *x >= 0 && *y >= 0) {
return 0;
} else {
return -1;
}
} else {
return -1;
}
}
int main(int argc, char *argv[])
{
int x, y;
int m, n;
int i, c;
scanf("%d", &c);
for (i = 0; i < c; ++i) {
scanf("%d %d", &n, &m);
if (legs(&x, &y, m, n) == 0)
printf("%d %d\n", y, x);
else
printf("No answer\n");
}
return 0;
}