//非洲大地是一個例外兇猛的動物王國,老虎,獅子,豹子是頂層的食肉動物,
//它們不但捕食兔子、羚羊、斑馬等食草性動物來生存,
//食肉動物也可以互相吃掉比較弱小的食肉動物,
//這些動物的排泄物可以補養草木,讓其生長,滿足食草動物的需要。
//請模擬該生態系統的動態回圈程序,尋找調節某類動物數量的方式
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
enum eA {Tiger,Lion,Leopard,Hare,Antelope,Zebra,Grass,Waste};
char *names[8]={"老虎","獅子","豹子","兔子","羚羊","斑馬","草","排泄物"};
struct _A {
int count;
} A[8];
void init() {
int k;
srand(time(NULL));
for (k=0;k<8;k++) {
switch (k) {
case Tiger:
A[k].count=4;
break;
case Lion:
A[k].count=10;
break;
case Leopard:
A[k].count=20;
break;
case Hare:
A[k].count=2000;
break;
case Antelope:
A[k].count=500;
break;
case Zebra:
A[k].count=100;
break;
case Grass:
A[k].count=300000;
break;
case Waste:
A[k].count=1000;
break;
}
}
}
void show(int day) {
int k;
printf("==========第%d天==========\n",day);
for (k=0;k<8;k++) {
printf("%6s:%d\n",names[k],A[k].count);
}
}
void loop() {
int k,d,n,f,i,r;
d=0;
while (1) {
show(d);
if (getch()==27) break; //按Esc鍵退出
d++;
for (k=0;k<8;k++) {
switch (k) {
case Tiger:
if (A[k].count>0) {//老虎數量>0
for (i=0;i<A[k].count;i++) {//每只老虎
f=0;//饑餓中
n=10;//最多嘗試覓食10次
while (1) {
r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20) {
A[Hare].count-=20;
f=1;
}
} else if ( 6<=r && r<11) {//吃羚羊2只
if (A[Antelope].count>=2) {
A[Antelope].count-=2;
f=1;
}
} else if (11<=r && r<16) {//吃斑馬1只
if (A[Zebra].count>=1) {
A[Zebra].count-=1;
f=1;
}
} else if (16<=r && r<19) {//吃豹子2只
if (A[Leopard].count>=2) {
A[Leopard].count-=2;
f=1;
}
} else if (19<=r && r<19) {//吃獅子1只
if (A[Lion].count>=1) {
A[Lion].count-=1;
f=1;
}
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=5;//吃飽后排泄5
}
}
}
break;
case Lion:
if (A[k].count>0) {//獅子數量>0
for (i=0;i<A[k].count;i++) {//每只獅子
f=0;//饑餓中
n=5;//最多嘗試覓食5次
while (1) {
r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20) {
A[Hare].count-=20;
f=1;
}
} else if ( 6<=r && r<11) {//吃羚羊2只
if (A[Antelope].count>=2) {
A[Antelope].count-=2;
f=1;
}
} else if (11<=r && r<16) {//吃斑馬1只
if (A[Zebra].count>=1) {
A[Zebra].count-=1;
f=1;
}
} else if (16<=r && r<19) {//吃豹子2只
if (A[Leopard].count>=2) {
A[Leopard].count-=2;
f=1;
}
} else if (19<=r && r<19) {//吃老虎1只
if (A[Tiger].count>=1) {
A[Tiger].count-=1;
f=1;
}
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=5;//吃飽后排泄5
}
}
}
break;
case Leopard:
if (A[k].count>0) {//豹子數量>0
for (i=0;i<A[k].count;i++) {//每只豹子
f=0;//饑餓中
n=20;//最多嘗試覓食20次
while (1) {
r=rand()%20;
if ( 0<=r && r<10) {//吃兔子10只
if (A[Hare].count>=20) {
A[Hare].count-=20;
f=1;
}
} else if (10<=r && r<16) {//吃羚羊1只
if (A[Antelope].count>=2) {
A[Antelope].count-=2;
f=1;
}
} else if (16<=r && r<19) {//吃斑馬1只
if (A[Zebra].count>=1) {
A[Zebra].count-=1;
f=1;
}
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=4;//吃飽后排泄5
}
}
}
break;
case Hare:
if (A[k].count>0) {//兔子數量>0
for (i=0;i<A[k].count;i++) {//每只兔子
f=0;//饑餓中
n=500;//最多嘗試覓食500次
while (1) {
if (A[Grass].count>=20) {//吃草20
A[Grass].count-=20;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=1;//吃飽后排泄1
}
}
}
break;
case Antelope:
if (A[k].count>0) {//羚羊數量>0
for (i=0;i<A[k].count;i++) {//每只羚羊
f=0;//饑餓中
n=200;//最多嘗試覓食200次
while (1) {
if (A[Grass].count>=50) {//吃草50
A[Grass].count-=50;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=3;//吃飽后排泄1
}
}
}
break;
case Zebra:
if (A[k].count>0) {//斑馬數量>0
for (i=0;i<A[k].count;i++) {//每只斑馬
f=0;//饑餓中
n=100;//最多嘗試覓食200次
while (1) {
if (A[Grass].count>=80) {//吃草80
A[Grass].count-=80;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=4;//吃飽后排泄1
}
}
}
break;
case Grass:
if (A[k].count>0) {//草數量>0
for (i=0;i<A[k].count;i++) {//每棵草
f=0;//饑餓中
n=1000;//最多嘗試覓食1000次
while (1) {
if (A[Waste].count>=5) {//吃排泄物5
A[Waste].count-=5;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
}
}
}
break;
case Waste:
break;
}
}
}
}
int main() {
init();
loop();
return 0;
}
//==========第0天==========
// 老虎:4
// 獅子:10
// 豹子:20
// 兔子:2000
// 羚羊:500
// 斑馬:100
// 草:300000
//排泄物:1000
//==========第1天==========
// 老虎:4
// 獅子:10
// 豹子:16
// 兔子:1700
// 羚羊:488
// 斑馬:93
// 草:117547
//排泄物:0
//==========第2天==========
// 老虎:4
// 獅子:10
// 豹子:10
// 兔子:1520
// 羚羊:476
// 斑馬:87
// 草:28534
//排泄物:1
//==========第3天==========
// 老虎:4
// 獅子:10
// 豹子:4
// 兔子:1360
// 羚羊:247
// 斑馬:42
// 草:34
//排泄物:1355
//==========第4天==========
// 老虎:4
// 獅子:10
// 豹子:0
// 兔子:650
// 羚羊:121
// 斑馬:17
// 草:14
//排泄物:1356
//==========第5天==========
// 老虎:4
// 獅子:10
// 豹子:0
// 兔子:245
// 羚羊:56
// 斑馬:7
// 草:14
//排泄物:1356
//==========第6天==========
// 老虎:4
// 獅子:10
// 豹子:0
// 兔子:72
// 羚羊:24
// 斑馬:1
// 草:14
//排泄物:1356
//==========第7天==========
// 老虎:4
// 獅子:9
// 豹子:0
// 兔子:6
// 羚羊:4
// 斑馬:0
// 草:14
//排泄物:1346
//==========第8天==========
// 老虎:3
// 獅子:4
// 豹子:0
// 兔子:3
// 羚羊:0
// 斑馬:0
// 草:14
//排泄物:1286
//==========第9天==========
// 老虎:1
// 獅子:2
// 豹子:0
// 兔子:1
// 羚羊:0
// 斑馬:0
// 草:14
//排泄物:1216
//==========第10天==========
// 老虎:0
// 獅子:1
// 豹子:0
// 兔子:0
// 羚羊:0
// 斑馬:0
// 草:14
//排泄物:1146
//==========第11天==========
// 老虎:0
// 獅子:0
// 豹子:0
// 兔子:0
// 羚羊:0
// 斑馬:0
// 草:14
//排泄物:1076
//==========第12天==========
// 老虎:0
// 獅子:0
// 豹子:0
// 兔子:0
// 羚羊:0
// 斑馬:0
// 草:14
//排泄物:1006
//
//C:\tmp\tmp>
uj5u.com熱心網友回復:
草吃排泄物太多了!
uj5u.com熱心網友回復:
//非洲大地是一個例外兇猛的動物王國,老虎,獅子,豹子是頂層的食肉動物,
//它們不但捕食兔子、羚羊、斑馬等食草性動物來生存,
//食肉動物也可以互相吃掉比較弱小的食肉動物,
//這些動物的排泄物可以補養草木,讓其生長,滿足食草動物的需要。
//請模擬該生態系統的動態回圈程序,尋找調節某類動物數量的方式
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
enum eA {Tiger,Lion,Leopard,Hare,Antelope,Zebra,Grass,Waste};
char *names[8]={"老虎","獅子","豹子","兔子","羚羊","斑馬","草","排泄物"};
struct _A {
int count;
} A[8];
void init() {
int k;
srand(time(NULL));
for (k=0;k<8;k++) {
switch (k) {
case Tiger:
A[k].count=4;
break;
case Lion:
A[k].count=10;
break;
case Leopard:
A[k].count=20;
break;
case Hare:
A[k].count=2000;
break;
case Antelope:
A[k].count=500;
break;
case Zebra:
A[k].count=100;
break;
case Grass:
A[k].count=300000;
break;
case Waste:
A[k].count=1000;
break;
}
}
}
void show(int day) {
int k;
printf("==========第%d天==========\n",day);
for (k=0;k<8;k++) {
printf("%6s:%d\n",names[k],A[k].count);
}
}
void loop() {
int k,d,n,f,i,r;
d=0;
while (1) {
show(d);
if (getch()==27) break; //按Esc鍵退出
d++;
for (k=0;k<8;k++) {
switch (k) {
case Tiger:
if (A[k].count>0) {//老虎數量>0
for (i=0;i<A[k].count;i++) {//每只老虎
f=0;//饑餓中
n=10;//最多嘗試覓食10次
while (1) {
r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20) {
A[Hare].count-=20;
f=1;
}
} else if ( 6<=r && r<11) {//吃羚羊2只
if (A[Antelope].count>=2) {
A[Antelope].count-=2;
f=1;
}
} else if (11<=r && r<16) {//吃斑馬1只
if (A[Zebra].count>=1) {
A[Zebra].count-=1;
f=1;
}
} else if (16<=r && r<19) {//吃豹子2只
if (A[Leopard].count>=2) {
A[Leopard].count-=2;
f=1;
}
} else if (19<=r && r<19) {//吃獅子1只
if (A[Lion].count>=1) {
A[Lion].count-=1;
f=1;
}
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=5;//吃飽后排泄5
}
}
}
break;
case Lion:
if (A[k].count>0) {//獅子數量>0
for (i=0;i<A[k].count;i++) {//每只獅子
f=0;//饑餓中
n=5;//最多嘗試覓食5次
while (1) {
r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20) {
A[Hare].count-=20;
f=1;
}
} else if ( 6<=r && r<11) {//吃羚羊2只
if (A[Antelope].count>=2) {
A[Antelope].count-=2;
f=1;
}
} else if (11<=r && r<16) {//吃斑馬1只
if (A[Zebra].count>=1) {
A[Zebra].count-=1;
f=1;
}
} else if (16<=r && r<19) {//吃豹子2只
if (A[Leopard].count>=2) {
A[Leopard].count-=2;
f=1;
}
} else if (19<=r && r<19) {//吃老虎1只
if (A[Tiger].count>=1) {
A[Tiger].count-=1;
f=1;
}
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=5;//吃飽后排泄5
}
}
}
break;
case Leopard:
if (A[k].count>0) {//豹子數量>0
for (i=0;i<A[k].count;i++) {//每只豹子
f=0;//饑餓中
n=20;//最多嘗試覓食20次
while (1) {
r=rand()%20;
if ( 0<=r && r<10) {//吃兔子10只
if (A[Hare].count>=20) {
A[Hare].count-=20;
f=1;
}
} else if (10<=r && r<16) {//吃羚羊1只
if (A[Antelope].count>=2) {
A[Antelope].count-=2;
f=1;
}
} else if (16<=r && r<19) {//吃斑馬1只
if (A[Zebra].count>=1) {
A[Zebra].count-=1;
f=1;
}
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=4;//吃飽后排泄5
}
}
}
break;
case Hare:
if (A[k].count>0) {//兔子數量>0
for (i=0;i<A[k].count;i++) {//每只兔子
f=0;//饑餓中
n=500;//最多嘗試覓食500次
while (1) {
if (A[Grass].count>=20) {//吃草20
A[Grass].count-=20;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=1;//吃飽后排泄1
}
}
}
break;
case Antelope:
if (A[k].count>0) {//羚羊數量>0
for (i=0;i<A[k].count;i++) {//每只羚羊
f=0;//饑餓中
n=200;//最多嘗試覓食200次
while (1) {
if (A[Grass].count>=50) {//吃草50
A[Grass].count-=50;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=3;//吃飽后排泄1
}
}
}
break;
case Zebra:
if (A[k].count>0) {//斑馬數量>0
for (i=0;i<A[k].count;i++) {//每只斑馬
f=0;//饑餓中
n=100;//最多嘗試覓食200次
while (1) {
if (A[Grass].count>=80) {//吃草80
A[Grass].count-=80;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//餓死
} else {
A[Waste].count+=4;//吃飽后排泄1
}
}
}
break;
case Grass:
break;
case Waste:
if (A[k].count>0) {//排泄物數量>0
for (i=0;i<A[k].count;i++) {//每堆排泄物
f=0;//漚肥中
n=1;//最多嘗試長草1次
while (1) {
r=rand()%20;
if ( 0<=r && r< 15) {//長草1000
A[k].count--;
A[Grass].count+=1000;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//沒長草就降解
}
}
}
break;
}
}
}
}
int main() {
init();
loop();
return 0;
}
srand(time(NULL));
for (k=0;k<8;k++) {
switch (k) {
case Tiger :A[k].count= 4;break;
case Lion :A[k].count= 10;break;
case Leopard :A[k].count= 20;break;
case Hare :A[k].count= 2000;break;
case Antelope:A[k].count= 500;break;
case Zebra :A[k].count= 100;break;
case Grass :A[k].count=300000;break;
case Waste :A[k].count= 1000;break;
}
}
}
void show(int day) {
int k;
printf("==========第%d天==========\n",day);
for (k=0;k<8;k++) {
printf("%6s:%u\n",names[k],A[k].count);
}
}
void loop() {
int k,d,n,f,r;
unsigned int i;
d=0;
while (1) {
show(d);
if (getch()==27) break; //按Esc鍵退出
d++;
for (k=0;k<8;k++) {
switch (k) {
case Tiger:
if (A[k].count>0) {//老虎數量>0
for (i=0;i<A[k].count;i++) {//每只老虎
f=0;//饑餓中
n=0;
while (1) {
r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20+2) {
A[Hare].count-=20;
f=1;
}
} else if ( 6<=r && r<11) {//吃羚羊2只
if (A[Antelope].count>=2+2) {
A[Antelope].count-=2;
f=1;
}
} else if (11<=r && r<16) {//吃斑馬1只
if (A[Zebra].count>=1+2) {
A[Zebra].count-=1;
f=1;
}
} else if (16<=r && r<19) {//吃豹子2只
if (A[Leopard].count>=2+2) {
A[Leopard].count-=2;
f=1;
}
} else if (19<=r && r<19) {//吃獅子1只
if (A[Lion].count>=1+2) {
A[Lion].count-=1;
f=1;
}
}
if (f==1) break;
n++;
if (n>=10) break; //最多嘗試覓食10次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=5;//吃飽后排泄5
if ((A[k].count*2<A[Hare ].count/20
|| A[k].count*2<A[Antelope].count/2
|| A[k].count*2<A[Zebra ].count/1
|| A[k].count*2<A[Leopard ].count/2
|| A[k].count*2<A[Lion ].count/1)
&& n<=1
&& rand()%30==0) A[k].count++; //如果老虎的數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/30概率生一只老虎
if (A[k].count>20) A[k].count=20;//老虎不可能>20
}
}
}
break;
case Lion:
if (A[k].count>0) {//獅子數量>0
for (i=0;i<A[k].count;i++) {//每只獅子
f=0;//饑餓中
n=0;
while (1) {
r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20+2) {
A[Hare].count-=20;
f=1;
}
} else if ( 6<=r && r<11) {//吃羚羊2只
if (A[Antelope].count>=2+2) {
A[Antelope].count-=2;
f=1;
}
} else if (11<=r && r<16) {//吃斑馬1只
if (A[Zebra].count>=1+2) {
A[Zebra].count-=1;
f=1;
}
} else if (16<=r && r<19) {//吃豹子2只
if (A[Leopard].count>=2+2) {
A[Leopard].count-=2;
f=1;
}
} else if (19<=r && r<19) {//吃老虎1只
if (A[Tiger].count>=1+2) {
A[Tiger].count-=1;
f=1;
}
}
if (f==1) break;
n++;
if (n>=5) break; //最多嘗試覓食5次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=5;//吃飽后排泄5
if ((A[k].count*2<A[Hare ].count/20
|| A[k].count*2<A[Antelope].count/2
|| A[k].count*2<A[Zebra ].count/1
|| A[k].count*2<A[Leopard ].count/2
|| A[k].count*2<A[Tiger ].count/1)
&& n<=1
&& rand()%20==0) A[k].count++; //如果獅子的數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/20概率生一只獅子
if (A[k].count>40) A[k].count=40;//獅子不可能>40
}
}
}
break;
case Leopard:
if (A[k].count>0) {//豹子數量>0
for (i=0;i<A[k].count;i++) {//每只豹子
f=0;//饑餓中
n=0;
while (1) {
r=rand()%20;
if ( 0<=r && r<10) {//吃兔子10只
if (A[Hare].count>=20+2) {
A[Hare].count-=20;
f=1;
}
} else if (10<=r && r<16) {//吃羚羊1只
if (A[Antelope].count>=2+2) {
A[Antelope].count-=2;
f=1;
}
} else if (16<=r && r<19) {//吃斑馬1只
if (A[Zebra].count>=1+2) {
A[Zebra].count-=1;
f=1;
}
}
if (f==1) break;
n++;
if (n>=20) break; //最多嘗試覓食20次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=4;//吃飽后排泄4
if ((A[k].count*2<A[Hare ].count/20
|| A[k].count*2<A[Antelope].count/2
|| A[k].count*2<A[Zebra ].count/1)
&& n<=1
&& rand()%15==0) A[k].count++; //如果豹子的數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/15概率生一只豹子
if (A[k].count>100) A[k].count=100;//豹子不可能>100
}
}
}
break;
case Hare:
if (A[k].count>0) {//兔子數量>0
for (i=0;i<A[k].count;i++) {//每只兔子
f=0;//饑餓中
n=0;
while (1) {
if (A[Grass].count>=50+2) {//吃草50
A[Grass].count-=50;
f=1;
}
if (f==1) break;
n++;
if (n>=500) break; //最多嘗試覓食500次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=1;//吃飽后排泄1
if ((A[k].count*5<A[Grass].count/20)
&& n<=1
&& rand()%10==0) A[k].count++; //如果兔子的數量翻5倍且食物夠吃,且僅1次覓食就吃飽,1/10概率生一只兔子
if (A[k].count>20000) A[k].count=20000;//兔子不可能>10000
}
}
}
break;
case Antelope:
if (A[k].count>0) {//羚羊數量>0
for (i=0;i<A[k].count;i++) {//每只羚羊
f=0;//饑餓中
n=0;
while (1) {
r=rand()%40;
if ( 0<=r && r<39) {//吃草50
if (A[Grass].count>=50) {
A[Grass].count-=50;
f=1;
}
} else if (39<=r && r<40) {//1/40概率生一只羚羊
f=1;
A[k].count++;
}
if (f==1) break;
n++;
if (n>=200) break; //最多嘗試覓食500次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=3;//吃飽后排泄3
if ((A[k].count*2<A[Grass].count/50)
&& n<=1
&& rand()%15==0) A[k].count++; //如果羚羊數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/15概率生一只羚羊
if (A[k].count>5000) A[k].count=5000;//羚羊不可能>5000
}
}
}
break;
case Zebra:
if (A[k].count>0) {//斑馬數量>0
for (i=0;i<A[k].count;i++) {//每只斑馬
f=0;//饑餓中
n=0;
while (1) {
r=rand()%60;
if ( 0<=r && r<59) {//吃草50
if (A[Grass].count>=80) {//吃草80
A[Grass].count-=80;
f=1;
}
} else if (59<=r && r<60) {//1/60概率生一只斑馬
f=1;
A[k].count++;
}
if (f==1) break;
n++;
if (n>=100) break; //最多嘗試覓食100次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=4;//吃飽后排泄4
if ((A[k].count*2<A[Grass].count/80)
&& n<=1
&& rand()%25==0) A[k].count++; //如果斑馬數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/25概率生一只斑馬
if (A[k].count>2000) A[k].count=2000;//斑馬不可能>2000
}
}
}
break;
case Grass:
if (A[k].count<=0) {//干旱導致寸草不生
A[k].count=300000;//一場大雨草瘋長
}
break;
case Waste:
if (A[k].count>0) {//排泄物數量>0
for (i=0;i<A[k].count;i++) {//每堆排泄物
f=0;//漚肥中
n=1;//最多嘗試長草1次
while (1) {
r=rand()%20;
if ( 0<=r && r< 10) {//長草100
A[k].count--;
if (A[Grass].count<3000000+100) //草不可能超過3000000
A[Grass].count+=100;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//沒長草就降解
}
}
}
break;
}
}
}
}
int main() {
init();
loop();
return 0;
}
srand(time(NULL));
for (k=0;k<8;k++) {
switch (k) {
case Tiger :A[k].count= 4;break;
case Lion :A[k].count= 10;break;
case Leopard :A[k].count= 20;break;
case Hare :A[k].count= 2000;break;
case Antelope:A[k].count= 500;break;
case Zebra :A[k].count= 100;break;
case Grass :A[k].count=300000;break;
case Waste :A[k].count= 1000;break;
}
}
}
void show(int day) {
int k;
printf("==========第%d天==========\n",day);
for (k=0;k<8;k++) {
printf("%6s:%u\n",names[k],A[k].count);
}
}
void loop() {
int k,d,n,f,r;
unsigned int i;
d=0;
while (1) {
show(d);
if (getch()==27) break; //按Esc鍵退出
d++;
for (k=0;k<8;k++) {
switch (k) {
case Tiger:
if (A[k].count>0) {//老虎數量>0
for (i=0;i<A[k].count;i++) {//每只老虎
f=0;//饑餓中
n=0;
while (1) {
r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20+2) {
A[Hare].count-=20;
f=1;
}
} else if ( 6<=r && r<11) {//吃羚羊2只
if (A[Antelope].count>=2+2) {
A[Antelope].count-=2;
f=1;
}
} else if (11<=r && r<16) {//吃斑馬1只
if (A[Zebra].count>=1+2) {
A[Zebra].count-=1;
f=1;
}
} else if (16<=r && r<19) {//吃豹子2只
if (A[Leopard].count>=2+2) {
A[Leopard].count-=2;
f=1;
}
} else if (19<=r && r<19) {//吃獅子1只
if (A[Lion].count>=1+2) {
A[Lion].count-=1;
f=1;
}
}
if (f==1) break;
n++;
if (n>=10) break; //最多嘗試覓食10次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=5;//吃飽后排泄5
if ((A[k].count*2<A[Hare ].count/20
|| A[k].count*2<A[Antelope].count/2
|| A[k].count*2<A[Zebra ].count/1
|| A[k].count*2<A[Leopard ].count/2
|| A[k].count*2<A[Lion ].count/1)
&& n<=1
&& rand()%30==0) A[k].count++; //如果老虎的數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/30概率生一只老虎
if (A[k].count>20) A[k].count=20;//老虎不可能>20
}
}
}
break;
case Lion:
if (A[k].count>0) {//獅子數量>0
for (i=0;i<A[k].count;i++) {//每只獅子
f=0;//饑餓中
n=0;
while (1) {
r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20+2) {
A[Hare].count-=20;
f=1;
}
} else if ( 6<=r && r<11) {//吃羚羊2只
if (A[Antelope].count>=2+2) {
A[Antelope].count-=2;
f=1;
}
} else if (11<=r && r<16) {//吃斑馬1只
if (A[Zebra].count>=1+2) {
A[Zebra].count-=1;
f=1;
}
} else if (16<=r && r<19) {//吃豹子2只
if (A[Leopard].count>=2+2) {
A[Leopard].count-=2;
f=1;
}
} else if (19<=r && r<19) {//吃老虎1只
if (A[Tiger].count>=1+2) {
A[Tiger].count-=1;
f=1;
}
}
if (f==1) break;
n++;
if (n>=5) break; //最多嘗試覓食5次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=5;//吃飽后排泄5
if ((A[k].count*2<A[Hare ].count/20
|| A[k].count*2<A[Antelope].count/2
|| A[k].count*2<A[Zebra ].count/1
|| A[k].count*2<A[Leopard ].count/2
|| A[k].count*2<A[Tiger ].count/1)
&& n<=1
&& rand()%20==0) A[k].count++; //如果獅子的數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/20概率生一只獅子
if (A[k].count>40) A[k].count=40;//獅子不可能>40
}
}
}
break;
case Leopard:
if (A[k].count>0) {//豹子數量>0
for (i=0;i<A[k].count;i++) {//每只豹子
f=0;//饑餓中
n=0;
while (1) {
r=rand()%20;
if ( 0<=r && r<10) {//吃兔子10只
if (A[Hare].count>=20+2) {
A[Hare].count-=20;
f=1;
}
} else if (10<=r && r<16) {//吃羚羊1只
if (A[Antelope].count>=2+2) {
A[Antelope].count-=2;
f=1;
}
} else if (16<=r && r<19) {//吃斑馬1只
if (A[Zebra].count>=1+2) {
A[Zebra].count-=1;
f=1;
}
}
if (f==1) break;
n++;
if (n>=20) break; //最多嘗試覓食20次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=4;//吃飽后排泄4
if ((A[k].count*2<A[Hare ].count/20
|| A[k].count*2<A[Antelope].count/2
|| A[k].count*2<A[Zebra ].count/1)
&& n<=1
&& rand()%15==0) A[k].count++; //如果豹子的數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/15概率生一只豹子
if (A[k].count>100) A[k].count=100;//豹子不可能>100
}
}
}
break;
case Hare:
if (A[k].count>0) {//兔子數量>0
for (i=0;i<A[k].count;i++) {//每只兔子
f=0;//饑餓中
n=0;
while (1) {
if (A[Grass].count>=50+2) {//吃草50
A[Grass].count-=50;
f=1;
}
if (f==1) break;
n++;
if (n>=500) break; //最多嘗試覓食500次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=1;//吃飽后排泄1
if ((A[k].count*5<A[Grass].count/20)
&& n<=1
&& rand()%10==0) A[k].count++; //如果兔子的數量翻5倍且食物夠吃,且僅1次覓食就吃飽,1/10概率生一只兔子
if (A[k].count>20000) A[k].count=20000;//兔子不可能>10000
}
}
}
break;
case Antelope:
if (A[k].count>0) {//羚羊數量>0
for (i=0;i<A[k].count;i++) {//每只羚羊
f=0;//饑餓中
n=0;
while (1) {
r=rand()%40;
if ( 0<=r && r<39) {//吃草50
if (A[Grass].count>=50) {
A[Grass].count-=50;
f=1;
}
} else if (39<=r && r<40) {//1/40概率生一只羚羊
f=1;
A[k].count++;
}
if (f==1) break;
n++;
if (n>=200) break; //最多嘗試覓食500次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=3;//吃飽后排泄3
if ((A[k].count*2<A[Grass].count/50)
&& n<=1
&& rand()%15==0) A[k].count++; //如果羚羊數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/15概率生一只羚羊
if (A[k].count>5000) A[k].count=5000;//羚羊不可能>5000
}
}
}
break;
case Zebra:
if (A[k].count>0) {//斑馬數量>0
for (i=0;i<A[k].count;i++) {//每只斑馬
f=0;//饑餓中
n=0;
while (1) {
r=rand()%60;
if ( 0<=r && r<59) {//吃草50
if (A[Grass].count>=80) {//吃草80
A[Grass].count-=80;
f=1;
}
} else if (59<=r && r<60) {//1/60概率生一只斑馬
f=1;
A[k].count++;
}
if (f==1) break;
n++;
if (n>=100) break; //最多嘗試覓食100次
}
if (f==0) {
if (A[k].count>2) //最后兩只被人類保護
A[k].count--;//餓死
} else {
A[Waste].count+=4;//吃飽后排泄4
if ((A[k].count*2<A[Grass].count/80)
&& n<=1
&& rand()%25==0) A[k].count++; //如果斑馬數量翻倍且食物夠吃,且僅1次覓食就吃飽,1/25概率生一只斑馬
if (A[k].count>2000) A[k].count=2000;//斑馬不可能>2000
}
}
}
break;
case Grass:
if (A[k].count<=0) {//干旱導致寸草不生
A[k].count=300000;//一場大雨草瘋長
}
break;
case Waste:
if (A[k].count>0) {//排泄物數量>0
for (i=0;i<A[k].count;i++) {//每堆排泄物
f=0;//漚肥中
n=1;//最多嘗試長草1次
while (1) {
r=rand()%20;
if ( 0<=r && r< 10) {//長草100
A[k].count--;
if (A[Grass].count<3000000+100) //草不可能超過3000000
A[Grass].count+=100;
f=1;
}
if (f==1) break;
n--;
if (n<=0) break;
}
if (f==0) {
A[k].count--;//沒長草就降解
}
}
}
break;
}
}
}
}
int main() {
init();
loop();
return 0;
}
程式中的 r=rand()%20;
if ( 0<=r && r< 6) {//吃兔子20只
if (A[Hare].count>=20+2) {
A[Hare].count-=20;
我理解是:r取20以內的亂數作為這一次老虎實際吃的兔子數
如果r的值是在0~5之間
以下的看不懂了
uj5u.com熱心網友回復:
r=rand()%20;//r==0..19
if ( 0<=r && r< 6) {//滿足r==0..5即6/20概率時,老虎吃兔子,且一次吃20只才能吃飽
if (A[Hare].count>=20+2) { //但前提是兔子≥22只,即吃掉20只兔子后至少還剩2只兔子
A[Hare].count-=20;
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......