Подсчитать количество локальных минимумов в заданной матрице - C#

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

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

Помогите кто чем может, заранее спасибо) Задание:Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей (Соседями элемента Аij в матрице назовем элементы Akv c i-1≤k≤i+1, j-1≤v≤j+1, (к, v)≠(i, j)). Подсчитать количество локальных минимумов заданной матрицы размером 10 х 10. Найти сумму модулей элементов, расположенных выше главной диагонали.

Решение задачи: «Подсчитать количество локальных минимумов в заданной матрице»

textual
Листинг программы
using System;
using System.Text.RegularExpressions;
using System.Linq;
 
 
 
 
namespace L3Z5 {
    class Program {
        static void Main() {
            //Готовим консоль
            Console.Title="******** Лаба ********";
            Console.WindowHeight=Console.LargestWindowHeight;
            Console.WriteLine();
            z7();
            
 
            Console.ReadLine();
        }        
        static void printArray(int[,] Array) {
            int m=Array.GetLength(0), n=Array.GetLength(1);
            for (int i=0; i<m; i++) {
                Console.Write("\t");
                for (int j=0; j<n; j++)
                    Console.Write("  {0}", Array[i, j]);
                Console.WriteLine("");
            }
        }        
        static string read() {
            ConsoleColor pColor=Console.ForegroundColor;
            Console.ForegroundColor=ConsoleColor.Yellow;
            string strMsg=Console.ReadLine();
            Console.ForegroundColor=pColor;
 
            return strMsg;
        }
        static int[,] readArray(string strMsg, bool isTwo=true) {
            ConsoleColor pColor=Console.ForegroundColor;
            Console.ForegroundColor=ConsoleColor.Yellow;
            Console.WriteLine(strMsg);
            Console.ForegroundColor=pColor;
            //Выясним размер матнрицы
            int m,n;
            MatchCollection mm;
            if (isTwo) {
                Console.Write("\nУкажите размер матрицы: M x N = ");
                mm=Regex.Matches(read(), @"\d+");
                if (mm.Count<2) {
                    Console.WriteLine("Нужно указать не менее двух натуральных чисел.");
                    return null;
                } else if ((m=int.Parse(mm[0].Value))==0 || (n=int.Parse(mm[1].Value))==0) {
                    Console.WriteLine("Нужно вводить натуральные числа.");
                    return null;
                }
            } else {
                Console.Write("\nУкажите размер квадратной матрицы: M = ");
                try {
                    n=m=int.Parse(read());
                    if (m<1) {
                        Console.WriteLine("Нужно указать натуральное число.\n");
                        return null;
                    }
                } catch (Exception ex) {
                    Console.WriteLine("Нужно указать натуральное число.\n{0}", ex.Message);
                    return null;
                }
            }
 
            int[,] Array=new int[m, n];
            //Заполним матрицу
            Console.WriteLine("\nЗАПОЛНЕНИЕ матрицы:");
            for (int i=0; i<m; i++) {
                Console.Write("Укажите через пробелы {0} целых чисел {1} строки: ", n, i+1);
                mm=Regex.Matches(read(), @"[+|-]?\d+");
                if (mm.Count<n) {
                    Console.WriteLine("Нужно указывать не менее {0} целых чисел, т.к матрица имеет {0} столбцов.", n);
                    return null;
                } else
                    for (int j=0; j<n; j++)
                        Array[i, j]=int.Parse(mm[j].Value);
            }
 
            return Array;
        }
        
        static public void z7() {
            
            //Спрашиваем матрицу
            int[,] aA=readArray("Заполните матрицу A:");
            if (aA==null)
                return;
            //Найдем все локальные минимумы
            int m=aA.GetLength(0), n=aA.GetLength(1);
            int q=(from i in Enumerable.Range(0, m)
                   join j in Enumerable.Range(0, n) on 1 equals 1
                   where   (i-1<0 || j-1<0 ||   aA[i, j]<aA[i-1, j-1]) 
                        && (i-1<0 ||            aA[i, j]<aA[i-1, j]) 
                        && (i-1<0 || j+1==n ||  aA[i, j]<aA[i-1, j+1])
                        && (j-1<0 ||            aA[i, j]<aA[i, j-1]) 
                        && (j+1==n ||           aA[i, j]<aA[i, j+1])
                        && (i+1==m || j-1<0 ||  aA[i, j]<aA[i+1, j-1]) 
                        && (i+1==m ||           aA[i, j]<aA[i+1, j]) 
                        && (i+1==m || j+1==n || aA[i, j]<aA[i+1, j+1])
                  select new { i=i, j=j }).Count();
                       
            //Напечатаем результат
            Console.WriteLine("\nВсего  {0} локальных минимумов",q);
            printArray(aA);
 
        }
        
    }
}

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


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

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

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