會編程的雞
1. 百錢買百雞c語言編程 公雞5元/只 母雞3元/只 小雞1元/3隻 求所有滿足條件各雞數目 只用一層
#include<stdio.h>
intmain(intargc,constchar*argv[])
{
intgongji,muji=0,xiaoji=0;
for(gongji=0;gongji<=20;muji++)
{
if(gongji*5+muji*3<=100)
{
printf("公雞:%d 母雞:%d 小雞:%d ",gongji,muji,(100-gongji*5-muji*3)*3);
}
else
{
gongji++;muji=0;
}
}
return0;
}
2. 一道經典的編程問題:公雞5元一隻,母雞3元一隻,小雞1元三隻,現在要用100元買100隻雞.最優解
3. 編程題:一隻大雞3元,三隻小雞1元,如何用100塊錢買100隻雞
簡單啊。。。
大雞為x, 小雞數為3y(說明:這里小雞的數量一定是3的倍數,因為100元買100隻雞,雞不可能買小數只。。。所以大雞的價錢不可能產生小數。在這樣的情況下小雞的價錢也不會產生小數100-3x,這樣的話,必須是3的倍數才可以保證)
列出方程得到:
x+3y=100
3x+1*(3y/3)=100 =>3x+y=100;
解之,得到:
x=100-3y
3(100-3y)+y=100
300-8y=100
8y=200 , y=25
x = 25
so, 大雞25隻,小雞75隻
編程可以用計演算法,如上方程。
也可以用窮舉法:
python
>>> filter(lambda i: i[0]*3+i[1]/3==100 and i[0]+i[1]==100, [[x,y] for x in range(0, 101) for y in range(0, 101)])
[[25, 75]]
so, 大雞25隻,小雞75隻。
可以。。。請稍等。。。
C#版:
using System;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
for (int i = 0; i <= 100; i++) {
for (int j = 0; j <= 100; j++) {
//i-大雞 j小雞
if (i * 3 + j / 3 == 100 & i + j == 100) {
Console.WriteLine("大雞{0}只,小雞{1}只", i, j);
}
}
}
Console.ReadKey();
}
}
}
c版:
#include <stdio.h>
int main()
{
int i, j;
for(i=0; i<=100; i++)
for (j=0; j<=100; j++)
if (i+j==100 && 3*i+j/3==100)
printf("大雞%d只, 小雞%d只\n", i, j);
return 0;
}
結果都是一樣的:大雞25隻,小雞75隻
優化:
反正大小雞共100隻,可以直接根據大雞數量計算小雞,這樣去掉一層循環:從循環1萬次減到100次。
#include <stdio.h>
int main()
{
int i;
for(i=0; i<=100; i++){
int j = 100 - i;
if (3*i+j/3==100)
printf("大雞%d只, 小雞%d只\n", i, j);
}
return 0;
}
繼續優化:
小雞的數量一定是3的整數倍,所以可以用小雞數量來循環,可以使循環數量再減少:
#include <stdio.h>
int main()
{
int j; //小雞的數量一定是3的整數倍
for(j=0; 3*j<=100; j++){
int i = 100 - 3*j;
if (3*i+j==100)
printf("大雞%d只, 小雞%d只\n", i, 3*j);
}
return 0;
}
4. 編程C語言百雞問題(盡量減少循環變數得計算量)
##include <stdio.h>
void main ()
{
int cock,hen;
for (cock = 0; cock <= 20; cock++)
for (hen =0; hen <= 100/3; hen++)
if (cock * 5 + hen * 3 + (100 - cock - hen) *1 <= 100)
printf("cock:%d, hen:%d, chick:%d\n", cock, hen, 100 - cock - hen);
}
發現你的題目有點問題
怎麼買都是全買小雞,公雞母雞數量全為0
5. VF編程:用100元錢買100隻雞,公雞每隻5元,母雞每隻3元,小雞每隻0.3元,問公雞、母雞和小雞各買多少只。
100除以5加3加0.3的和,約等於13隻
6. C語言編程,百雞問題
#include<stdio.h>
#include<stdlib.h>
int main(){
int g,m,x,i=0;
for(g=0;g<=20;g++){
for(m=0;m<=33;m++){
x=100-g-m;
if(x%3==0){
if(5*g+3*m+x/3==100){
i++;
printf("%d: %d,%d,%d ",g,m,x);
}
}
}
}
system("pause");
return 0;
}
7. 編程 c語言100元買100隻雞,公雞五元錢一隻,母雞三元錢一隻,小雞一元錢三
#include<stdio.h>
intmain()
{
intgj,mj,xj;//公雞,母雞,小雞
for(gj=1;gj<=20;gj++)//公雞5塊錢一隻,100塊最多買20隻
for(mj=1;mj<=33;mj++)//同理
for(xj=1;xj<=300;xj+=3)//一塊錢3隻,每次增量為3
if((gj+mj+xj==100)&&(gj*5+mj*3+xj/3<=100))//總量為100隻雞,且價格要在100塊以內
printf("公雞%d只,母雞%d只,小雞%d只 ",gj,mj,xj);
return0;
}
8. 用while循環做:雞兔同籠,頭有30個,腳有90隻,求雞兔各幾只
樓主您好, 我是學Pascal語言的,不大懂C語言,但是編程語言應該是相通的,我給出Pascal語言的一種方法,不知對您是否有用 ——
program chickens _and_rabbits; //程序首部
const
heads=30;
feet=90; {定義常量「頭」是30,「腳」是90}
var
chickens,rabbits:integer; //定義變數雞、兔為整型
begin
chickens:=0; //雞的只數初始賦值為0
rabbits:=heads-chickens; //兔的只數初始賦值為90-0=90
while 4*rabbits+2*chickens<>feet do //「<>」是「≠」的意思
chickens:=chickens+1; //或者是inc(chickens)
rabbits:=heads-chickens;
write('chickens=',chickens,' ','rabbits=',rabbits); {結束循環然後分別輸出雞兔只數}
end.
9. c語言編程:一隻老母雞一天下一個蛋,蛋一天變小雞,小雞一天後變母雞,一百天後有多少雞和蛋
計算機模擬這個過程,就是一個遞推公式。
int n = 100; // days
int hen = 1 ; //開始1隻雞
int egg = 0; // 0個蛋
int chick = 0 ; // 0隻小雞
for(int i=1;i<n;i++){
int tmp = chick;
chick = egg; // 小雞由前一次的蛋孵化
egg = hen; //前一次的雞下蛋
hen += tmp;//以前的雞 和 小雞成長的雞 相加
}
printf("%d,%d,%d",hen,egg,chick);
10. 編程 百元百雞問題
設公雞 x 只,母雞 y只,則小雞 100-x-y只;
x的取值范圍0到100, y取值范圍0到100-x, 故二重循環解決
代碼為:
deffun():
forxinrange(100):
foryinrange(100-x):
if5*x+3*y+(100-x-y)/3==100:
print("公雞=%d,母雞=%d,小雞=%d"%(x,y,100-x-y))
return
運算結果:
公雞=0,母雞=25,小雞=75
公雞=4,母雞=18,小雞=78
公雞=8,母雞=11,小雞=81
公雞=12,母雞=4,小雞=84