数学建模社区-数学中国

标题: matlab一个很小的编程题目,求助!!! [打印本页]

作者: daseasea    时间: 2013-7-22 09:02
标题: matlab一个很小的编程题目,求助!!!
本人matlab基本上是不大懂的。。。本来想用C语言实现,结果发现C语言在数学问题上实在有限,题目不难,但是实在不会用matlab把代码写出来
因此求助各位大神,耽误您一点小小的时间帮我写一下这个题目的matlab代码行吗?谢谢各位!我会附上我的c语言代码,如果有需要,可以直接用。

题目如下:一个小蚂蚁在平面格点上移动,1/4概率上下左右,每次移动一步,比如从(0,0)到(0,1),不能斜着移动。
设总共走了n步,
记这n步中,走到过的格点数目为R(重复走到的格点,只能算一个)
记这n步中,到过int(ln(n))次的格点数目为r
计算当n趋于无穷时 r/R的比值

例如:走了n=10步,可能只到过8不同的格点(有重复走到的格点),此时R=8
        在n=10步中,int(ln(10))=2,此时统计到过两次的格点数目,可能有1个,r=1

我的c语言代码如下
#include<cmath>
#include <ctime>
#include <cstdlib>
using namespace std;
long const N=100;
long const M=2*N;
int main()
{
        int a[M+1][M+1]={0};
        int b;
        int j=N,k=N;
        double R=0,r=0;
        srand(unsigned(time(0)));
        for(int i=1;i<=N;i++)
        {
                b=1+4*rand()/RAND_MAX;
                switch (b)
                {
                case 1:j++;a[j][k]=a[j][k]+1;break;
                case 2:k++;a[j][k]=a[j][k]+1;break;
                case 3:j--;a[j][k]=a[j][k]+1;break;
                case 4:k--;a[j][k]=a[j][k]+1;break;
                default:break;
                }
        }
        for(int i=0;i<=M;i++)
                for(int s=0;s<=M;s++)
                {
                        if(a[i][s]!=0)
                                R=R+1;
                }
        if(int(log(double(N)))!=0)
        {
                for(int i=0;i<=M;i++)
                        for(int s=0;s<=M;s++)
                        {
                                if(a[i][s]==int(log(double(N))))
                                r=r+1;
                        }
        }
        cout<<r<<endl<<R<<endl;
    cout<<r/R<<endl;
        return 0;
}


作者: gt93    时间: 2013-8-21 13:12
目测楼主是C霸。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5