Задать вопрос
@evgemiil

Как посчитать количество одинаковых элементов в строчке и вывести первый?

Программа должна найти и вывести все последовательности из 2 и более одинаковых символов подряд в любой вертикали, горизонтали и диагонали.
Порядок вывода последовательностей не важен.
Нумерация столбцов и строк ведётся с единицы, слева направо и сверху вниз, соответственно.
Пример ввода:
M=4
N=5
b = = = b
1 b 2 b a
c 4 b a +
5 c a b +
Пример вывода:
- [1 2] = 3
| [3 5] + 2
\ [1 1] b 4
\ [3 1] c 2
/ [2 5] a 3
/ [1 5] b 3

Я вот не пойму есть специальные методы способы ероме циклов или в цикле все дело, пытался в циклах не так как нужно, подскажите направьте в правильном направлении?
using System;
using System.Linq;

namespace Matrix
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите количество строк");
            int M;
            string inputM = Console.ReadLine();
            var a = int.TryParse(inputM, out M);
                
            Console.WriteLine("Введите количество столбцов");
            int N;
            string inputN = Console.ReadLine();
            var b = int.TryParse(inputN, out N);
            
            if (a == false || b == false || M < 1 || N < 1)
            {
                Console.WriteLine("Неккоректный ввод!");
            }
            Console.WriteLine("Заполните матрицу");
            string[,] matrix = new string[M, N];
            try
            {
                
                string[] str;
                for (int i = 0; i < M; i++)
                {
                    str = (Console.ReadLine()).Split(' ');
                    for (int j = 0; j < M; j++)
                        matrix[i, j] = Convert.ToString(str[j]);
                }
                    
                Console.WriteLine("Матрица");

                for (int i = 0; i < M; i++)
                {
                    for (int j = 0; j < N; j++)
                    {
                        Console.Write(matrix[i, j] + "\t");
                    }
                    Console.WriteLine("\n");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ошибка: " + ex.Message);
            }

            string z;
            
            for (int i = 0; i < M; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    if (j < N - 1)
                    {
                        if (matrix[i, j] == matrix[i, j + 1])
                        {
                            for (int k = N; k >= 0; --k)
                            {
                                if (k == 0) { Console.WriteLine("[" + (i + 1) + " " + (j + 1) + "]"); }
                            }

                        }
                    }
                }

            }

            Console.Write("Для выхода нажмите <Enter>");
            Console.ReadLine();

        }

        
    }
}
  • Вопрос задан
  • 3973 просмотра
Подписаться 1 Оценить 2 комментария
Ответ пользователя Антон Федорян К ответам на вопрос (2)
AnnTHony
@AnnTHony
Интроверт
using System;
using System.Collections.Generic;

namespace matrix
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            if (args.Length > 0)
                return;

            string[] matrix =
            {
                "1b2ba", 
                "b====", 
                "ccb++",
                "ccab+"
            };
            HorizontalLeftToRight(matrix);
            VerticalTopToBottom(matrix);
            DiagonalUp(matrix);
            DiagonalDown(matrix);
            Console.ReadLine();
        }

        private static void HorizontalLeftToRight(IReadOnlyList<string> matrix)
        {
            for (var row = 0; row < matrix.Count; row++)
            {
                var count = 0;
                for (var col = 0; col < matrix[0].Length; col++)
                {
                    count++;
                    try
                    {
                        if (matrix[row][col].Equals(matrix[row][col + 1])) continue;
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(26), row, col - count + 1, matrix[row][col], count);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(26), row, col - count + 1, matrix[row][col], count);
                    }
                    count = 0;
                }
            }
        }

        private static void VerticalTopToBottom(IReadOnlyList<string> matrix)
        {
            for (var col = 0; col < matrix[0].Length; col++)
            {
                var count = 0;
                for (var row = 0; row < matrix.Count; row++)
                {
                    count++;
                    try
                    {
                        if (matrix[row][col].Equals(matrix[row + 1][col])) continue;
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(25), row - count + 1, col, matrix[row][col], count);
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(25), row - count + 1, col, matrix[row][col], count);
                    }
                    count = 0;
                }
            }
        }

        private static void DiagonalUp(IReadOnlyList<string> matrix)
        {
            for (var row = 1; row < matrix.Count; row++)
            {
                var r = row;
                var count = 0;
                for (var col = 0; col < matrix[0].Length; col++)
                {
                    count++;
                    try
                    {
                        if (matrix[r][col].Equals(matrix[r - 1][col + 1])) continue;
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(47), r + count - 1, col - count + 1, matrix[r][col], count);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(47), r + count - 1, col - count + 1, matrix[r][col], count);
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(47), r + count - 1, col - count + 1, matrix[r][col], count);
                    }
                    finally
                    {
                        r--;
                    }
                    count = 0;
                }
            }

            for (var col = 1; col < matrix[0].Length; col++)
            {
                var c = col;
                var count = 0;
                for (var row = matrix.Count - 1; row > -1; row--)
                {
                    count++;
                    try
                    {
                        if (matrix[row][c].Equals(matrix[row - 1][c + 1])) continue;
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(47), row + count - 1, c - count + 1, matrix[row][c], count);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(47), row + count - 1, c - count + 1, matrix[row][c], count);
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(47), row + count - 1, c - count + 1, matrix[row][c], count);
                    }
                    finally
                    {
                        c++;
                    }
                    count = 0;
                }
            }
        }

        private static void DiagonalDown(IReadOnlyList<string> matrix)
        {
            for (var col = matrix[0].Length - 2; col > -1; col--)
            {
                var c = col;
                var count = 0;
                for (var row = 0; row < matrix.Count; row++)
                {
                    count++;
                    try
                    {
                        if (matrix[row][c].Equals(matrix[row + 1][c + 1])) continue;
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(92), row - count + 1, c - count + 1, matrix[row][c], count);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(92), row - count + 1, c - count + 1, matrix[row][c], count);
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(92), row - count + 1, c - count + 1, matrix[row][c], count);
                    }
                    finally
                    {
                        c++;
                    }
                    count = 0;
                }
            }

            for (var row = 1; row < matrix.Count; row++)
            {
                var r = row;
                var count = 0;
                for (var col = 0; col < matrix[0].Length; col++)
                {
                    count++;
                    try
                    {
                        if (matrix[r][col].Equals(matrix[r + 1][col + 1])) continue;
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(92), r - count + 1, col - count + 1, matrix[r][col], count);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(92), r - count + 1, col - count + 1, matrix[r][col], count);
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        if (count > 1)
                            Console.WriteLine("{0}  [{1}, {2}]  \'{3}\'  {4}", Convert.ToChar(92), r - count + 1, col - count + 1, matrix[r][col], count);
                    }
                    finally
                    {
                        r++;
                    }
                    count = 0;
                }
            }
        }
    }
}
Ответ написан