随机漫步算法中的条件

本文关键字:条件 算法 漫步 随机 | 更新日期: 2023-09-27 18:13:14

我是一个编程初学者,我被分配了一个小项目。教练不清楚我到底应该做什么。我只知道这是一个"随机漫步",我不应该使用方法,我只需要使用循环,分支和随机数生成器(甚至不确定这个)。它还应该接收来自用户的步数,并根据给定的步数行走。无论如何,我是一个初学者,对c#的了解非常有限。我在这里和其他地方做了很多研究,但都没有成功。代码要么非常复杂,要么是用其他语言编写的。我已经编写了一些代码。我不知道这是否正确。请给我一些指点。没有错误,但是程序不工作,条件有问题。

 static void Main(string[] args)
    {
        int row = 100;
        int col = 100;
        int[,] matrix;
        matrix = new int[row, col];
        int n;
        Console.WriteLine("Enter the number of steps:");
        n = int.Parse(Console.ReadLine());
        const int up = 1;
        const int down = 2;
        const int left = 3;
        const int right = 4;
        int number=0;
        for (int i=0;i<100;i++)
        {
            for (int j = 0; j < 100; j++)
                matrix[i, j] = number;
        }
        Random randomdirection = new Random();
        for (int counter = 0; counter < n; counter++)
        {
            int direction = randomdirection.Next(1, 5);
            while (direction == 1)
            {
                if ((++col) < 100 && matrix[row, ++col] == 0)
                {
                    matrix[row, ++col] = ++number;
                }
                else
                    break;
            }
            while (direction == 2)
            {
                if ((--col) < 100 && matrix[row, --col] == 0)
                {
                    matrix[row, --col] = ++number;
                }
                else
                    break;
            }
            while (direction == 3)
            {
                if ((--row) < 100 && matrix[--row, col] == 0)
                {
                    matrix[--row, col] = ++number;
                }
                else
                    break;
            }
            while (direction == 4)
            {
                if ((++row) < 100 && matrix[++row,col] == 0)
                {
                    matrix[++row,col] = ++number;
                }
                else
                    break;
            }
        }
        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
                Console.WriteLine(matrix[i, j]);
        }
        Console.ReadKey();
    }

这是赋值:一个醉汉漫无目的地走着,从一根灯柱开始。在每一个时间步骤中,醉汉忘记他或她在哪里,然后随机地朝北、东、南或西走一步,概率为25%。醉汉走N步后离灯柱有多远?它非常不完整。我们没有学过课程和方法,所以从逻辑上讲,我们不应该使用它们。我认为关键是要使用数组,循环和分支。代码是我自己写的。这就是为什么它这么乱。

改成这样:似乎我没有看到问题:(

 static void Main(string[] args)
    {
        Random randomObject = new Random();
        int randomDirection;
        int[,] mainarray;
        int row=10;
        int col=10;
        mainarray=new int[row,col];
        int number=0;
        for (int b=0;b<row;b++)
        {
            for (int c=0;c<col;c++)
                mainarray[b,c]=number;
        }
        while (true)
        {
            int n;
            Console.WriteLine("Enter the number of steps: ");
            n = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < n; i++)
            {
                randomDirection = randomObject.Next(1, 5);
                if (randomDirection == 1 && row < 0 && row < 10)
                    mainarray[++row, col] = ++number;
                if (randomDirection == 2 && row < 0 && row < 10)
                    mainarray[--row, col] = ++number;
                if (randomDirection == 3 && col < 0 && col < 10)
                    mainarray[row, ++col] = ++number;
                if (randomDirection == 4 && col < 0 && col < 10)
                    mainarray[row, --col] = ++number;
            }
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                    Console.Write(mainarray[i,j]);
            }
        }
        Console.ReadKey();
    }

随机漫步算法中的条件

我认为你们的方法整体上是错误的。

假设你有一个100 × 100的网格。你想在随机方向上走x步。您将需要这样的内容:

static void Main(string[] args)
{
    Random randomObject = new Random();
    int randomDirection;
    while (true) { //because your program needs to run infinitely
        Console.WriteLine("Enter the number of steps:");
        n = int.Parse(Console.ReadLine());
        //You walk a random way each step
        for (int i = 0; i < n; i++)
        {
            randomDirection = randomObject.Next(1,5);
            if (randomDirection == 1)
            {
                //walk right
            }
            if (randomDirection == 2)
            {
                //walk left
            }
            if (randomDirection == 3)
            {
                //walk up
            }
            if (randomDirection == 4)
            {
                //walk down
            }
            //Also check if you aren't walking against walls! 
        }
     }
}

在你的评论和问题之后编辑:

你可以像你说的那样做randomDirection==1 && row<100来检查你是否走在墙上。你必须写一些代码来选择另一个方向,因为如果你不能朝那个方向移动,但i增加了,那就错了。这样你就不动了,但每走一步就会被计算在内。

你可以像你说的那样做那行代码(以及所有其他方向)来检查你是否超出了界限。我要把所有的if换成else if语句。else if (randomDirection == 4 && col < 100) {}后写else { i--; }

至于检查醉汉走了多远,你可以用勾股定理。

EDIT2:您使用:randomDirection == 1 && row < 0 && row < 10。你总是检查row是否小于0。应该是row > 0

EDIT3:实际上你对mainArray的整个使用毫无意义。为什么不将rowcol设置为0,如果您向右走,则设置row++ ?

static void Main(string[] args)
{
    Random randomObject = new Random();
    int randomDirection;
    int row = 1;
    int col = 1;
    while (true)
    {
        int n;
        row = 1;
        col = 1;
        Console.WriteLine("Enter the number of steps: ");
        n = Convert.ToInt32(Console.ReadLine());
        for (int i = 0; i < n; i++)
        {
            randomDirection = randomObject.Next(1, 4);
            if (randomDirection == 1 && row > 0 && row <= 10)
                row++;
            else if (randomDirection == 2 && row > 0 && row <= 10)
                row--;
            else if (randomDirection == 3 && col > 0 && col <= 10)
                col--;
            else if (randomDirection == 4 && col > 0 && col <= 10)
                col++;
            else
                i--;
        }
        Console.WriteLine("You have walked in row: " + row);
        Console.WriteLine("You have walked in col: " + col);
        Console.WriteLine("");
    }
}