C语言编写程序,请大家提供点思路,或者这题应该应用哪一方面去做写一下,大家交流一下把问题解决。
问题描述:在一个平面区域内有n*n个子区域,每个区域内存在0-3个生物群落,若该区域内生物群落达到4,则所有生物将平均向相邻的4个区域迁移;当向某个指定区域内投放食物时,...
问题描述: 在一个平面区域内有n*n个子区域,每个区域内存在0-3个生物群落,若该区域内生物群落达到4,则所有生物将平均向相邻的4个区域迁移;当向某个指定区域内投放食物时,该区域内的生物群落将加1,编写程序模拟该环境。。我发现不懂得从哪一方面入手
展开
1个回答
展开全部
思路是:
1、定义一个数组a[n][n];
2、利用随机数%4对其赋值;
3、写投食函数,投食a[i][j],判断是否是4;
4、投食函数:如果是4,则平均分散到a[i-1][j-1]、a[i][j-1]、a[i+1][j]、a[i+1][j+1];否则返回
5、对以上四个区域进行递归调用投食函数。
具体代码自己写吧。如果不懂递归,可以追问。这个题突破点就在递归。
1、定义一个数组a[n][n];
2、利用随机数%4对其赋值;
3、写投食函数,投食a[i][j],判断是否是4;
4、投食函数:如果是4,则平均分散到a[i-1][j-1]、a[i][j-1]、a[i+1][j]、a[i+1][j+1];否则返回
5、对以上四个区域进行递归调用投食函数。
具体代码自己写吧。如果不懂递归,可以追问。这个题突破点就在递归。
追问
什么条件下结束递归?能把这道题的代码写下?谢谢,会多加悬赏
追答
#include
#include
#include
#define N 10
#define M 4
int feed_food(int arr[][N], int i, int j)
{
if(i=N || j>=N)
return -1;
arr[i][j]++;
if(arr[i][j]<M)
return arr[i][j];
arr[i][j]=0;
feed_food(arr,i,j-1);
feed_food(arr,i,j+1);
feed_food(arr,i-1,j);
feed_food(arr,i+1,j);
return arr[i][j];
}
int main(void)
{
int arr[N][N];
srand((int)time(0));
int i,j;
printf("original array is:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
arr[i][j]=rand()%M;
printf("%d ",arr[i][j]);
}
printf("\n");
}
feed_food(arr,4,5);
printf("after area (4,5) feed food, array is:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%d ",arr[i][j]);
printf("\n");
}
return 0;
}
写的比较简单,自己揣摩吧。
4、投食函数:如果是4,则平均分散到a[i-1][j-1]、a[i][j-1]、a[i+1][j]、a[i+1][j+1];否则返回
这点改为
如果是4,则平均分散到a[i-1][j]、a[i][j-1]、a[i+1][j]、a[i][j+1];否则返回
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询