阴茎算法
㈠ 比如,一个鸡的算法,15元一斤,三斤鸡,等于315,这是怎样的算法
一斤15元,一个鸡三斤,3×15等于45元,一个三斤鸡45元,现在花费了315元,315÷45=7,那么应该有7只三斤鸡。
㈡ 百鸡问题算法
学过数学这个问题就会了,数学里面是自己列出方程,然后解出来
C语言里吗,就是利用计算机的快速计算能力,但是很笨的算出来
定义三个变量
int x,y,z
然后三个变量都有取值范围的,如0-100,鸡的只数范围
然后利用一个三重循环,把x,y,z的值凑出来,计算机是这样的
这里答案正确的条件是5*x+3*y+z=100
for(x=0;x<=100;x++)
{
for(y=0;y<=100;y++)
{
for(z=0;z<=100;z++)
if(5*x+3*y+z=100)
{
printf("%d, %d, %d", x, y,z) ; //这里就是满足条件的x,y,z了
return;
}
}
}
希望你懂了,程序细节我就不多说了
㈢ 典型问题:百钱买百鸡的算法
百钱买百鸡问题——一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)。
这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:
这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z的取值范围:
1) x的取值范围为1~20
2) y的取值范围为1~33
3) z的取值范围为3~99,步长为3
对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。
数据要求
问题中的常量:
无
问题的输入:
无
问题的输出:
int x,y,z /*公鸡、母鸡、小鸡的只数*/
初始算法
1.初始化为1;
2.计算x循环,找到公鸡的只数;
3.计算y循环,找到母鸡的只数;
4.计算z循环,找到小鸡的只数;
5.结束,程序输出结果后退出。
算法细化
算法的步骤1实际上是分散在程序之中的,由于用的是for循环,很方便的初始条件放到了表达式之中了。
步骤2和3是按照步长1去寻找公鸡和母鸡的个数。
步骤4的细化
4.1 z=1
4.2 是否满足百钱,百鸡
4.2.1 满足,输出最终百钱买到的百鸡的结果
4.2.2 不满足,不做处理
4.3 变量增加,这里注意步长为3
流程图
图5-8 程序执行流程图
程序代码如下
#include "stdio.h"
main()
{
int x,y,z;
for(x=1;x<=20;x++)
for(y=1;y<=33;y++)
for(z=3;z<=99;z+=3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))/*是否满足百钱和百鸡的条件*/ printf("cock=%d,hen=%d,chicken=%d\n",x,y,z);
}
}
分析
程序运行结果如下:
cock=4,hen=8,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84
对于这个问题实际上可以不用三重循环,而是用二重循环,因为公鸡和母鸡数确定后,小鸡数就定了,即 。请同学们自己分析二重循环和三重循环的运行次数,做为练习自己调试这一方法。参考资料:东北大学计算中心 --网络文库
㈣ 百钱百鸡(穷举算法)
设公鸡、母鸡、小鸡分别为x、y、z 只,由题意得:
x+y+z =100……①
5x+3y+(1/3)z =100……②
有两个方程,三个未知量,称为不定方程组,有多种解。
令②×3-①得:7x+4y=100;
即:y =(100-7x)/4=25-(7/4)x
由于y 表示母鸡的只数,它一定是自然数,而4 与7 互质,因此x 必须是4 的倍数。我们把它写成:x=4k(k 是自然数),于是y=25-7k,代入原方程组,可得:z=75+3k。把它们写在一起有:
x =4k
y =25 - 7k
z =75+ 3k
一般情况下,当k 取不同数值时,可得到x、y、z 的许多组值。但针对本题的具体问题,由于x、y、z 都是100 以内的自然数,故k 只能取1、2、3 三个值,这样方程组只有以下三组解:
一、 x =4;y =18;z =78
二、 x =8;y =11;z =81
三、 x =12;y =4;z =84
㈤ 鸡兔同笼的算法
很简单。
假充共有x只鸡,y只兔,m个头,n条腿。
则有x*2 + y*4 = n
在x,y未知情况下
(1)假设全部为鸡,则共有z=2*m条腿
那么(n-z)的值,就是多出来的腿,考虑每只兔子4条腿,每只已有2条被计算过了,所以还有2条未被计算过,所以k=(n-z)/2,即得出兔子的数量。m-k即为鸡的数量
(2)假设全部为兔子,则有z=4*m条腿
那么(z-n)的值,即为缺少的腿的数量(每只鸡被多算了2条腿),所以k=(z-n)/2,就是鸡的数量,m-k就是兔子的数量。
两种算法,实质上是一样的。
㈥ 百鸡问题的具体算法
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
int sum=100;
for(a=1;a<=10;a++)
for(b=1;b<=18;b++)
for(c=5;c<=96;c++)
if(sum==a*10+b*5+c)
cout<<"a:"<<a<<",b:"<<b<<",c:"<<c<<endl;
}
㈦ 百鸡百日生百蛋算法
#include "stdio.h"
void main()
{
int socks=0,hens,chickens;
while (socks<=19)
{
hens=0;
while(hens<=33)
{
chickens=100-socks-hens;
if(5*socks+3*hens+chickens/3==100)
printf("%d,%d,%d",socks,hens,chickens);
chickens++;
}
hens++;
}
getch();
}
㈧ 百鸡问题C语言算法
//按你思路改的。
#include <stdio.h>
void main()
{
int cocks,hens,chicks,n=0;
while(n<=33)
{ //改过!改过!改过!改过!改过!改过!
chicks=3*n;
hens=0;
while(hens<=33)
{
cocks=100-hens-chicks;
if(5*cocks+3*hens+n==100&&cocks>=0) //改过!改过!改过!改过!改过!改过!
printf("%d %d %d\n",cocks,hens,chicks);
hens++;
}
n++;
}
}