Подсчитать количество локальных минимумов в заданной матрице - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д