Переписать алгоритм для определения диагоналей матрицы с использованием foreach - C#
Формулировка задачи:
Задание: Есть квадратная матрица m*n заполнить элементы над и под основной и побочными диагоналями звездочками, а слева и справа нулями, сами же диагонали заполнить суммой индексов элемента диагонали.
Сделал реализацию через обычный цикл, но она не устраивает, необходимо с помощью foreach, не могу придумать алгоритм для определения диагоналей, помогите пожалуйста.
using System;
namespace test3
{
class MainClass
{
public static void Main(string[] args)
{
int n;
do
{
Console.Write("Введите n: ");
int.TryParse(Console.ReadLine(), out n);
} while (n <= 0);
string[,] array = new string[n, n];
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (i == j || j == n - i - 1)
{
int x = (j + i);
array[j, i] = x.ToString();
Console.Write("{0,3}", array[j, i]);
}
else if ((j > i && j < n - i - 1) || (j < i && j > n - i - 1))
{
array[j, i] = "*";
Console.Write("{0,3}", array[j, i]);
}
else
{
array[j, i] = "0";
Console.Write("{0,3}", array[j, i]);
}
}
Console.ReadLine();
}
}
}
}Решение задачи: «Переписать алгоритм для определения диагоналей матрицы с использованием foreach»
textual
Листинг программы
using System;
using System.Linq;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args) {
int n;
do {
Console.Write("Введите n: ");
int.TryParse(Console.ReadLine(), out n);
} while (n <= 0);
string[,] array = new string[n, n];
// Внимание - костыль! Не рекомендуется к использованию в реальной жизни!
foreach (int i in Enumerable.Range(0, n)) {
foreach (int j in Enumerable.Range(0, n)) {
if (i == j || j == n - i - 1) {
int x = (j + i);
array[j, i] = x.ToString();
Console.Write("{0,3}", array[j, i]);
}
else if ((j > i && j < n - i - 1) || (j < i && j > n - i - 1)) {
array[j, i] = "*";
Console.Write("{0,3}", array[j, i]);
}
else {
array[j, i] = "0";
Console.Write("{0,3}", array[j, i]);
}
}
Console.ReadLine();
}
}
}
}