陰莖演算法
㈠ 比如,一個雞的演算法,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++;
}
}