Найти среди элементов, лежащих в выделенной области и имеющих в своей записи более двух цифр 0, максимальный

Всем привет ! Решаю задачу на двумерные массивы, дошел до соблюдения условия и не понимаю как его описать . Буду рад идеям и предложения)

Матрица Дана квадратная матрица B(K, K) натуральных чисел.
Найти среди элементов, лежащих в выделенной области
и имеющих в своей записи более двух цифр 0, макси-
мальный. Элементы, расположенные на границах облас-
ти, входят в заштрихованную часть.

 int K = Convert.ToInt32(numericUpDown1.Value); //получение размера матрицы
            int[,] A = new int[K, K]; //создание матрицы
            Grid.RowCount = K;
            Grid.ColumnCount = K;
            Random rnd = new Random();
            
                for (int i = 0; i < K; i++) // заполнение матрицы с выводом в dataGridView
                {                          
                for (int j = 0; j < K; j++)
                {
                    A[i, j] = rnd.Next(-100, 100);
                    Grid[j, i].Value = A[i, j];
                    if (i >= j && i + j <= K - 1)// проверка  условия, что это правый треугольник
                    {
                      //... как выполнить условие, что более двух 0 0 и максимальный элемент ?
                    }
                }
                label1.Text = " mах1..";
                }
            for (int i = 0; i < K; i++)// заполнение матрицы с выводом в dataGridView
            { for (int j = 0; j < K; j++)
                {
                    A[i, j] = rnd.Next(-100, 100);
                    Grid[j, i].Value = A[i, j];
                    if (i <= j && i + j > K - 1) // проверка  условия, что это элевый треугольник
                    {
                        //... как выполнить условие, что более двух 0 0 и максимальный элемент ?
                    }
                }
                label2.Text = " max2.. ";
            }

Лучше не смешивать заполнение, саму задачу и вывод. Сделайте хотя бы отдельные циклы, или функции (GenerateMatrix, ShowMatrix, FindMaxWithMoreThanTwoZerosInHighlightedArea, …).

Как минимум потому что из-за этого и копипаста вы тут снова генерируете новую матрицу после первой области.


Проверить наличие более двух 0 можно преобразовав число в строку и потом либо цикл, либо три вызова IndexOf (см. второй параметр), либо LINQ Count

using System;
using System.Linq;
					
public class Program
{
	static bool HasMoreThanTwoZeros(int num)
	{
		string numStr = num.ToString();
		return numStr.Count(c => c == '0') > 2;
	}

	public static void Main()
	{
		int num = 4200;
		int num1 = 40200;

		if (HasMoreThanTwoZeros(num)) {
			Console.WriteLine("num has 3 or more 0's");
		}
		if (HasMoreThanTwoZeros(num1)) {
			Console.WriteLine("num1 has 3 or more 0's");
		}
	}
}

https://dotnetfiddle.net/A0jJxM


Ну а макс. искать стандартным способом: в самом начале инициализировать в например int.MinValue, и для каждого подходящего элемента проверять не больше ли он текущего макс.


Тут не будет ни одного такого.

Понял интресно однако ) но если я поменяю на 0,1000 вроде должны появиться : 100,200,300 и т.д а вот если обойтись стандартными способами можно тут использовать деление на 100 для ( 0,1000) с использованием цикла for и if ?

Тут тоже нет 3 или более нулей.

Строка вполне стандартный способ.

Если без строки, то да, % + /.

https://stackoverflow.com/a/4808815/964478

int[] GetDigits(int num)
{
    if (num == 0)
    {
        return new int[] { 0 };
    }
    List<int> digits = new List<int>();
    while (num > 0)
    {
        digits.Add(num % 10);
        num = num / 10;
    }
    return digits.ToArray();
}

И пример выше превратится в

bool HasMoreThanTwoZeros(int num)
{
    return GetDigits(num).Count(n => n == 0) > 2;
}

(можно конечно сразу в цикле доставания цифр считать нули без создания списка цифр, но зачем)

А если от ( 0, 10000) и делить на 1000 ? :joy::joy::joy::joy: ? Спасибо большое за подсказки выше ) :grinning::+1:

Делить что и зачем? :thinking: