Loading...
Ankoun1 avatar Ankoun1 18 Точки

8. *Bombs - Judge - 50.

здравейте,какво трябва да се промени в логиката на задачата от тема - матрици?

using System;
using System.Collections.Generic;
using System.Linq;

namespace MatrixBombs

{
    class Program
    {
        public static object Matrix { get; private set; }

        static void Main(string[] args)
        {
            int input = int.Parse(Console.ReadLine());

            int[,] matrix = ReadMatrix(input, input);

            string[] positionBomb = Console.ReadLine().Split().ToArray();
            List<int[]> negativPosition = new List<int[]>();
            for (int i = 0; i < positionBomb.Length; i++)
            {
                int[] Bomb = positionBomb[i].Split(',').Select(int.Parse).ToArray();
                negativPosition.Add(Bomb);
            }
            while (negativPosition.Count > 0)
            {
                int rowBomb = negativPosition[0][0];
                int colBomb = negativPosition[0][1];
                negativPosition.RemoveAt(0);
                if(matrix[rowBomb,colBomb] <= 0)
                {
                    continue;
                }
                int count = 0;
                for (int i = 0; i < matrix.GetLength(0); i++)
                {
                    for (int j = 0; j < matrix.GetLength(1); j++)
                    {
                        if (j == colBomb || j == colBomb + 1 || j == colBomb - 1)
                        {
                            if (i == rowBomb + 1 || i == rowBomb - 1 || i == rowBomb)
                            {

                                for (int c = 0; c < negativPosition.Count; c++)
                                {
                                    if (negativPosition[c][0] == i && negativPosition[c][1] == j)
                                    {

                                        int[] reversPosition = negativPosition[count].ToArray();
                                        negativPosition[count] = negativPosition[c].ToArray();
                                        negativPosition[c] = reversPosition.ToArray();
                                        count++;

                                    }


                                }

                                if (matrix[i, j] > 0 && matrix[i, j] != matrix[rowBomb, colBomb])
                                {
                                    matrix[i, j] -= matrix[rowBomb, colBomb];

                                }

                            }
                        }

                    }

                }

                matrix[rowBomb, colBomb] = 0;
            }


            int sum = 0;
            int count1 = 0;
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    if (matrix[i, j] > 0)
                    {
                        count1++;
                        sum += matrix[i, j];
                    }
                }

            }
            Console.WriteLine($"Alive cells: {count1}");
            Console.WriteLine("Sum: " + sum);
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    if (j == matrix.GetLength(1) - 1)
                    {
                        Console.Write(matrix[i, j]);
                    }
                    else
                    {
                        Console.Write(matrix[i, j] + " ");
                    }
                }
                Console.WriteLine();
            }


        }

        static int[,] ReadMatrix(int row, int col)
        {
            int[,] matrix = new int[row, col];
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                int[] array = Console.ReadLine().Split().Select(int.Parse).ToArray();
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    matrix[i, j] = array[j];
                }


            }

            return matrix;
        }
       
    }
}

Тагове:
0
Module: C# Advanced 17/10/2020 14:20:10
kkaraivanov avatar kkaraivanov 486 Точки

Здравей. Прилагам линк към моето решение да сравниш с твоето и приложиш липсващите проверки.

0
Ankoun1 avatar Ankoun1 18 Точки

Благодаря, изпуснал съм проверка за координатите на бомбата  в матрицата и последователността на бомбите е еднаква на поредицата в масива от входа 

using System;
using System.Collections.Generic;
using System.Linq;

namespace MatrixBombs

{
    class Program
    {
        public static object Matrix { get; private set; }

        static void Main(string[] args)
        {
            int input = int.Parse(Console.ReadLine());

            int[,] matrix = ReadMatrix(input, input);

            string[] positionBomb = Console.ReadLine().Split().ToArray();
            int sum = 0;
            int count = 0;
            for (int p = 0; p < positionBomb.Length; p++)
            {
                int[] Bomb = positionBomb[p].Split(',').Select(int.Parse).ToArray();
                int rowBomb = Bomb[0];
                int colBomb = Bomb[1];

                if (rowBomb < 0 || rowBomb >= matrix.GetLength(0) || colBomb < 0 || colBomb >= matrix.GetLength(1))
                {
                    continue;
                }

                int o = matrix[rowBomb, colBomb];
                for (int i = 0; i < matrix.GetLength(0); i++)
                {
                    for (int j = 0; j < matrix.GetLength(1); j++)
                    {
                        if (j == colBomb || j == colBomb + 1 || j == colBomb - 1)
                        {
                            if (i == rowBomb + 1 || i == rowBomb - 1 || i == rowBomb)
                            {
                                if (matrix[i, j] > 0 && o > 0)
                                {
                                    matrix[i, j] -= o;

                                }
                            }
                        }
                        if (matrix[i, j] > 0 && p == positionBomb.Length - 1)
                        {
                            count++;
                            sum += matrix[i, j];
                        }
                    }

                }
            }

            Console.WriteLine($"Alive cells: {count}\nSum: {sum}");            
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {                    
                    Console.Write(matrix[i, j] + " ");                    
                }
                Console.WriteLine();
            }

        }

        static int[,] ReadMatrix(int row, int col)
        {
            int[,] matrix = new int[row, col];
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                int[] array = Console.ReadLine().Split().Select(int.Parse).ToArray();
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    matrix[i, j] = array[j];
                }
            }
            return matrix;
        }
    }
}

0
18/10/2020 15:52:03
Ankoun1 avatar Ankoun1 18 Точки

може да се усложни задачата и ако периметъра на взривената бомба обхваща  други бомби ,да се взривят първо те последователно  по ред , колона в матрицата и чак след това бомбата по индекс от подавания масив.Тогава може да се използва лист ,или стак ,или опашка за правилно координиране на детонациите

0
17/10/2020 14:23:41
Ankoun1 avatar Ankoun1 18 Точки

using System;
using System.Collections.Generic;
using System.Linq;

namespace MatrixBombs

{
    class Program
    {
        public static object Matrix { get; private set; }

        static void Main(string[] args)
        {
            int input = int.Parse(Console.ReadLine());

            int[,] matrix = ReadMatrix(input, input);

            string[] positionBomb = Console.ReadLine().Split().ToArray();
            List<int[]> negativPosition = new List<int[]>();
            for (int i = 0; i < positionBomb.Length; i++)
            {
                int[] Bomb = positionBomb[i].Split(',').Select(int.Parse).ToArray();
                negativPosition.Add(Bomb);
            }
            while (negativPosition.Count > 0)
            {
                int rowBomb = negativPosition[0][0];
                int colBomb = negativPosition[0][1];
                negativPosition.RemoveAt(0);
                if (rowBomb < 0 || rowBomb >= matrix.GetLength(0) || colBomb < 0 || colBomb >= matrix.GetLength(1))
                {
                    continue;
                }

                int o = matrix[rowBomb, colBomb];                
                int count = 0;
                for (int i = 0; i < matrix.GetLength(0); i++)
                {
                    for (int j = 0; j < matrix.GetLength(1); j++)
                    {
                        if (j == colBomb || j == colBomb + 1 || j == colBomb - 1)
                        {
                            if (i == rowBomb + 1 || i == rowBomb - 1 || i == rowBomb)
                            {

                                for (int c = 0; c < negativPosition.Count; c++)
                                {
                                    if (negativPosition[c][0] == i && negativPosition[c][1] == j)
                                    {
                                        int[] reversPosition = negativPosition[count].ToArray();
                                        negativPosition[count] = negativPosition[c].ToArray();
                                        negativPosition.Insert(count + 1, reversPosition);
                                        negativPosition.RemoveAt(c);
                                        count++;
                                    }
                                }
                                if (matrix[i, j] > 0 && o > 0)
                                {
                                    matrix[i, j] -= o;

                                }
                            }
                        }
                    }
                }                
            }

            int sum = 0;
            int count1 = 0;
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    if (matrix[i, j] > 0)
                    {
                        count1++;
                        sum += matrix[i, j];
                    }
                }

            }
            Console.WriteLine($"Alive cells: {count1}");
            Console.WriteLine("Sum: " + sum);
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    if (j == matrix.GetLength(1) - 1)
                    {
                        Console.Write(matrix[i, j]);
                    }
                    else
                    {
                        Console.Write(matrix[i, j] + " ");
                    }
                }
                Console.WriteLine();
            }

        }

        static int[,] ReadMatrix(int row, int col)
        {
            int[,] matrix = new int[row, col];
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                int[] array = Console.ReadLine().Split().Select(int.Parse).ToArray();
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    matrix[i, j] = array[j];
                }

            }
            return matrix;
        }
    }
}

0
17/10/2020 14:21:28
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.