Игра "Даты" Играют двое. Задается какая-то дата 2004 года - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Задали олимпиадное задание. Помогите пожалуйста решить эту задачу на C#. Задумался над другой задачей тему не ту написал. >< Дана матрица N*N, заполненная положительными числами. Путь по матрице начинается в левом верхнем углу. За один ход можно пройти в соседнюю по вертикали или горизонтали клетку (если она существует). Нельзя ходить по диагонали, нельзя оставаться на месте. Требуется найти максимальную сумму чисел, стоящих в клетках по пути длиной K (клетку можно посещать несколько раз). Ограничения: 2 £ N £ 15, элементы матрицы имеют значения от 1 до 999, 1 £ K £ 20, все числа целые, время 5с. Ввод из файла route2.in. В первой строке находятся разделенные пробелом числа N и K. Затем идут N строк по N чисел в каждой. Вывод в файл route2.out. Вывести одно число - максимальную сумму.

Решение задачи: «Игра "Даты" Играют двое. Задается какая-то дата 2004 года»

textual
Листинг программы
        static void Main(string[] args)
        {
            int[,] A = new int[6, 6];
            int k = 10;
            int posx = 0;
            int posy = 0; //A[0, 0] - верхний левый угол
            int posxOld = posx;
            int posyOld = posy;
            Random rand = new Random();
            int step; //0 - вверх, 1 - вниз, 2 - влево, 3 - вправо
            
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    A[i, j] = rand.Next(1, 10);
                    Console.Write(A[i, j] + " ");
                }
                Console.WriteLine();
            }
 
            int sum = A[0, 0];
 
            Console.Write("\nМаршрут: ");
            Console.Write(A[posx, posy] + " ");
            for (int i = 0; i < k;)
            {
                step = rand.Next(0, 4);
                if ((posxOld != posx) || (posyOld != posy))
                {
                    sum += A[posx, posy];
                    Console.Write(A[posx, posy] + " ");
                }
                posxOld = posx;
                posyOld = posy;
                
                
                switch (step)
                {
                    case 0:
                        if (posx > 0)
                        {
                            posx -= 1;
                            i++;
                        }
                        break;
                    case 1:
                        if (posx < 5)
                        {
                            posx += 1;
                            i++;
                        }
                        break;
                    case 2:
                        if (posy > 0)
                        {
                            posy -= 1;
                            i++;
                        }
                        break;
                    case 3:
                        if (posy < 5)
                        {
                            posy += 1; 
                            i++;
                        }
                        break;
                    default:
                        break;
                }
            }
            Console.WriteLine("\nSum = " + sum);
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы