買雞c語言
⑴ c語言(百錢買百雞的問題)
百錢百雞問題中國古代數學家張丘建在他的《算經》中提出了著名的「百錢買百雞問題」:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?
*題目分析與演算法設計設雞翁、雞母、雞雛的個數分別為cocks(x),hens(y),chicks(z),題意給定共100錢要買百雞,若全買公雞最多買20隻,顯然cocks的值在0~20之間;
同理,hens的取值范圍在0~33之間,可得到下面的不定方程: 5x+3y+z/3=100 x+y+z=100 所以此問題可歸結為求這個不定方程的整數解。由程序設計實現不定方程的求解與手工計算不同。在分析確定方程中未知數變化范圍的前提下,可通過對未知數可變范圍的窮舉,驗證方程在什麼情況下成立,從而得到相應的解。
程序解釋
main()
{
int cocks=0,hens,chicks;
while (cocks<=19) //公雞只數小於19
{hens=0;
while(hens<=33) //母雞小於33隻
{chicks=100-cocks-hens;
if (5.0*cocks+3.0*hens+chicks/3.0==100.0)
printf("%d %d %d\n",cocks,hens,chicks);
hens++;
}
cocks++;
}
}
*總是的進一步討論這類求解不定方程總理的實現,各層循環的控制變數直接與方程未知數有關,且採用對未知數的取值范上窮舉和組合的方法來復蓋可能得到的全部各組解。能否根據題意更合理的設置循環控制條件來減少這種窮舉和組合的次數,提高程序的執行效率,請讀者考慮
⑵ c語言解決百錢買雞問題
chicks小雞,cocks公雞,hens
n是錢,因為1錢可買3小雞,所以小雞數對應錢數就是:chicks=3*n
外層遍歷:內買小雞的錢,從0遍歷到33(容33塊就99個小雞了,明顯用不了這么多,但作者為了保險吧)
內層遍歷:買母雞的個數,從0遍歷到33個(33個母雞也99塊,與上面意圖相同,盡量遍歷到境界點,雖然有點不科學,但如果問題有解,在條件成立時加個跳出,也不礙事)
內層遍歷的時候:cocks=100-hens-chicks; 公雞=100-母雞-小雞,(確保三種雞加起來是100)
if(5*cocks+3*hens+n==100&&cocks>=0) 意思是:所有的錢加起來是100並且公雞個數不為負數
printf("%d %d %d\n",cocks,hens,chicks); //打完收工
hens++;//自增
}
n++;//自增
⑶ 各位大蝦,百錢買百雞用C語言怎麼做
雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
#include <stdio.h>
int main()
{
int m,w,c; //m代表雞翁,w代表雞母,c代表雞雛
for(m=1;m<=20;m++)
{
for(w=1;w<=40;w++)
{
for(c=1;c<=100;c++)
if((5.0*m+3.0*w+c/3.0==100.0)&&(m+w+c==100))
printf("雞翁有%d只,雞母有%d只,雞雛有%d只\n",m,w,c);
}
}
return 0;
}
⑷ C語言問題賣雞程序
t記錄可用的i
j
k
組合
if(5*i+j*3+k*3==N)
這是可用的條件
循環條件中i*5<=N
是因為i最多隻能到
N/5即
5塊錢的雞只能買100/5個
⑸ c語言n錢買n雞問題
先把我改過的代碼貼給你:
#include<stdio.h>
constintWeng=15;
constintMu=9;
constintChu=1;
intmain()
{
intiGold,iWeng,iMu,iChu,iFangAn=0,t=0;
scanf("%d",&iGold);
for(iChu=3;iChu<=iGold-1;iChu+=3){
for(iMu=1;iMu<=iGold-iChu-1;iMu++){
iWeng=iGold-iChu-iMu;
if(iGold*3==iWeng*Weng+iMu*Mu+iChu*Chu)
iFangAn++;
}
}
printf("%d",iFangAn);
return0;
}
你的問題在於那個判斷語句。總金、雞翁價、雞母價都應是原價的3倍。
至於循環,我改成了雛雞3倍遞增,因為這個題目不存在浮點數,其他的問題都不大。
⑹ C語言買雞問題
scanf("%d %d\n",&a,&b); 改成 scanf("%d %d",&a,&b); 就不需要多輸那個0了
⑺ c程序,買雞問題
程序運行結果沒有問題,是不是因為在運行過程中chick出現負數的原因回啊,將
for (cock = 0; cock <= n; cock++)
{
for (hen = 0; hen <= n; hen++)
改為
for (cock = 0; cock <= n/5; cock++)
{
for (hen = 0; hen <= n/3; hen++)
試試。答
⑻ C語言 百錢買百雞
*********************
演算法以及書寫上,似乎都有點小問題
*********************
如果「大公雞5文錢一隻,大母雞3文錢一隻,小雞版一文錢買三隻」權,且
a,b,c分別表示大公雞,大母雞,小雞,那麼......
if(5.0*a+3.0*b+c/3.0=100.0)
對於這一句,是有問題的:
1,像樓上說的,就是「=」與"=="問題,應該是「==」。
2,"5.0*a+3.0*b+c/3.0==100.0"中,設
x=c/3
,那麼你能保證
3*x==c
嗎???
顯然,是不能的,也就是說,小雞的數目不一定是3的倍數。而根據題目,顯然有c是3的倍數。這個問題用整除c%3==0來實現。
因此,正確的表示應該是:if(c%3==0&&(5.0*a+3.0*b+c/3.0==100.0))
這樣,就沒什麼問題了。
⑼ c語言100元買100隻雞
main()
{
int i,j,k
for(i=1;i<=20;i++)
{
for (j=1;j<=33;j++)
{
for(k=1;k<=100;k++)
{
i+k+j=100
5*i+3*k+k=100}
}
}