鸡兔同笼的问题 c语言怎么样编写
鸡兔同笼是中国古代的数学名题之一。
大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
这四句话的意思是:
有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”
程序如下:
#include <stdio.h> int main()
{ int T; int n; int m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
if((m-2*n)>=0 && (m-2*n)%2==0 && (4*n-m)>=0 && (4*n-m)%2==0)
printf("%d %d\n",(4*n-m)/2,(m-2*n)/2);
else
printf("No answer\n");
} return 0;
}
扩展资料:
C语言新手编程注意事项:
1、书写标识符时,忽略了大小写字母的区别。
2、忽略了变量的类型,进行了不合法的运算。
3、将字符常量与字符串常量混淆。
4、忽略了“=”与“==”的区别。
5、忘记加分号。
6、多加分号。
7、输入变量时忘记加地址运算符“&”。
8、输入数据的方式与要求不符。
参考资料来源:百度百科-C语言
1、编写思路如下:
假设有x只鸡,y只兔,两者一共有m只头,n只脚,则有:
x + y = m ; 2 * x + 4 * y = n ;
即得到关系式,x + 2y =n/2 , x + y = m , y = n/2 - m , x = 2 * m - n/2。
2、代码及注释如下:
#include<stdio.h>
main ( )
{
int a, b ;
printf("请分别输入动物头与脚的数目:\n");
scanf("%d%d",&a,&b); //头数为a, 脚数目为b;
printf("一共有%d只鸡,%d只兔子\n",b/2-a,2 * a - b/2);
}
扩展资料:
常见鸡兔同笼类型问题:
1、班主任张老师带五年级(2)班50名同学栽树,张老师栽5棵,男生每人栽3棵,女生每人栽2棵,总共栽树120棵,问几名男生,几名女生?
2、大油瓶每瓶装4千克,小油瓶2瓶装1千克,现有100千克油装了共60个瓶子。问大小油瓶各多少个?
3、小毛参加数学竞赛,共做20道题,得67分,已知做对一道得5分,不做得0分,错一题扣1分,又知道他做错的题和没做的同样多。问小毛做对几道题?
4、有蜘蛛,蜻蜓,蝉三种动物共18只,共有腿118条,翅膀20对(蜘蛛8条腿;蜻蜓6条腿,2对翅膀;蝉6条腿,1对翅膀),三种动物各几只?
参考资料来源:百度百科-鸡兔同笼问题
输入说明: 输入为两个正整数,第一个为 M 的值,第二个为 N 的值,用空格分隔。
输出说明: 若有解,输出两个整数,用空格分隔,第一个代表鸡的只数,第一个代表兔子的只数;若无解,直接输出一个 0。
算法:以列举法写程序,让计算机从鸡为0开始执行计算,利用循环语句计算大量次数后,得出最终结果。
具体程序为:
#include <stdio.h>
int main()
{int chicken,rabbit;//鸡,兔子
int M,N;//头,脚
printf("M=,N=");
scanf("%d %d",&M,&N);
for(chicken=0;chicken<=M;chicken++)//鸡的数量从0到总头数M尝试
{if(chicken*2+rabbit*4==N)//如果总脚数与输入的总脚数相同
{printf("%d %d",chicken,rabbit);//分别输出鸡、兔
return 0;//停止程序}}//for执行完表示找不到
printf("0");return 0;}
扩展资料:
鸡兔同笼问题算法有很多种,编写出的程序不尽相同。下面列举几种算法,编写程序会更为简单一些。
有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?
(1)假设全是鸡:2×35=70(只),鸡脚比总脚数少:94-70=24 (只)
兔子比鸡多的脚数:4-2=2(只),兔子的只数:24÷2=12 (只),鸡的只数:35-12=23(只)
假设全是兔子:4×35=140(只),兔子脚比总数多:140-94=46(只)
兔子比鸡多的脚数:4-2=2(只),鸡的只数:46÷2=23(只),兔子的只数:=35-23=12(只)(2)设鸡有x只,兔有y只。
解得
参考资料:鸡兔同笼(一种数学奥数题目)_百度百科
void main()
{
long int a,b,c,d;
char ch,bh;
printf("请输入鸡与兔子的总数\n");
while(scanf("%d",&a)!=1)
{
printf("请输入正确的数量:");
for ( ; (ch = getchar())!='\n' && ch != EOF; )
{
continue;
}
}
printf("请输入鸡与兔子的脚的总数\n");
while(scanf("%d",&b)!=1)
{
printf("请输入正确的数量:");
for ( ; (bh = getchar())!='\n' && bh != EOF; )
{
continue;
}
}
c=(4*a-b)/2;
d=a-c;
if(c>=0&&d>=0)
{
if(c*2+d*4==b)
{
printf("鸡有%ld只\n",c);
printf("兔子有%ld只\n",d);
}
else printf("同学,我看你给的数有错吧!");
}
else printf("同学,我看你给的数有错吧!");
}
int main()
{
int h,f,x,y;
printf("输入头数与脚数\n");
printf("头=");
scanf("%d",&h);
printf("脚=");
scanf("%d",&f);
y=(f-2*h)/2;
x=h-y;
printf("鸡=%d,兔=%d\n",x,y);
}