Задание по прямоугольной матрице - C#
Формулировка задачи:
По заданию нужно
Дана целочисленная прямоугольная матрица. Определить
- количество строк, не содержащих ни одного нулевого элемента
- максимальное из чисел, встречающихся в заданной матрице более одного раза.
Вот мой код, посмотрите, плиз, всё ли у меня правильно.
using System;
//Дана целочисленная прямоугольная матрица. Определить
// - количество строк, не содержащих ни одного нулевого элемента
// - максимальное из чисел, встречающихся в заданной матрице более одного раза.
namespace Matrix1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите размерность матрицы");
Console.Write("Введите количество строк матрицы n = ");
int n = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите количество столбцов матрицы m = ");
int m = Convert.ToInt32(Console.ReadLine());
int[,] mas = new int[n, m];
FillMatrix(ref mas, n, m);
ShowMatrix(mas, n, m, "Исходная матрица");
Check(mas, n, m);
Find(mas, n, m);
Console.ReadKey();
}
private static void FillMatrix(ref int[,] mas, int n, int m)
{
Random rand = new Random();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
mas[i, j] = rand.Next(-100, 100);
}
}
}
private static void ShowMatrix(int[,] mas, int n, int m, string str)
{
Console.WriteLine(str);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
Console.Write(mas[i, j] + "\t");
}
Console.WriteLine();
}
}
private static void Check(int[,] mas, int n, int m)
{
int count = 0;
for (int i = 0; i < n; i++)
{
int k = 0;
for (int j = 0; j < m; j++)
{
if (mas[i, j] == 0) continue;
++k;
}
if (k == m) ++count;
}
Console.WriteLine("Количество строк, не содержащих ни одного нулевого элемента, равно {0}", count);
}
private static void Find(int[,] mas, int n, int m)
{
int[] tempMas = new int[n * m];
int count = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
tempMas[count] = mas[i, j];
++count;
}
}
Array.Sort(tempMas);
Array.Reverse(tempMas);
ShowMassiv(tempMas, "Отсортированный одномерный массив");
int maxNum;
bool flag = false;
for (int i = 0; i < tempMas.Length - 1; i++)
{
if (tempMas[i] != tempMas[i + 1]) continue;
maxNum = tempMas[i];
Console.WriteLine("Максимальное из чисел, встречающееся два раза, равно " + maxNum);
flag = true;
break;
}
if (flag == false)
{
Console.WriteLine("В массиве нет чисел, встречающихся два раза.");
}
}
//Вывод одномерного массива
private static void ShowMassiv(int[] mas, string str)
{
Console.WriteLine(str);
for (int i = 0; i < mas.Length; ++i)
{
Console.Write(mas[i] + " ");
}
Console.WriteLine();
}
}
}Решение задачи: «Задание по прямоугольной матрице»
textual
Листинг программы
static void Main(string[] args)
{
Console.WriteLine("Введите размерность матрицы");
Console.Write("Введите количество строк матрицы n = ");
int n = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите количество столбцов матрицы m = ");
int m = Convert.ToInt32(Console.ReadLine());
int[,] mas = FillMatrix(n, m);
ShowMatrix(mas, "Исходная матрица");
Console.WriteLine("Количество строк, не содержащих ни одного нулевого элемента, равно {0}", Check(mas).ToString()); ;
Find(mas);
Console.ReadKey();
}
private static int[,] FillMatrix(int n, int m)
{
int[,] mas = new int[n, m];
Random rand = new Random();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
mas[i, j] = rand.Next(-100, 100);
}
}
return mas;
}
private static void ShowMatrix(int[,] mas, string str)
{
Console.WriteLine(str);
for (int i = 0; i < mas.GetLength(0); i++)
{
for (int j = 0; j < mas.GetLength(1); j++)
{
Console.Write("{0,4}", mas[i, j]);
}
Console.WriteLine();
}
}
private static int Check(int[,] mas)
{
int count = 0;
for (int i = 0; i < mas.GetLength(0); i++)
{
int k = 0;
for (int j = 0; j < mas.GetLength(1); j++)
{
if (mas[i, j] == 0) continue;
++k;
}
if (k == mas.GetLength(1)) ++count;
}
return count;
}
private static void Find(int[,] mas)
{
int[] tempMas = new int[mas.GetLength(0) * mas.GetLength(1)];
int count = 0;
for (int i = 0; i < mas.GetLength(0); i++)
{
for (int j = 0; j < mas.GetLength(1); j++)
{
tempMas[count] = mas[i, j];
++count;
}
}
Array.Sort(tempMas);
Array.Reverse(tempMas);
ShowMassiv(tempMas, "Отсортированный одномерный массив");
int maxNum;
bool flag = false;
for (int i = 0; i < tempMas.Length - 1; i++)
{
if (tempMas[i] != tempMas[i + 1]) continue;
maxNum = tempMas[i];
Console.WriteLine("Максимальное из чисел, встречающееся два раза, равно " + maxNum);
flag = true;
break;
}
if (flag == false)
{
Console.WriteLine("В массиве нет чисел, встречающихся два раза.");
}
}
//Вывод одномерного массива
private static void ShowMassiv(int[] mas, string str)
{
Console.WriteLine(str);
for (int i = 0; i < mas.Length; ++i)
{
Console.Write(mas[i] + " ");
}
Console.WriteLine();
}