Другие языки программирования и технологии

Помогите решить задачу: C# Создать рандомную матрицу nxn (выполнено) после чего сложить данные выделенные элементы:

Пример матрицы 5х5:

1 2 * 4 5

2 * 4 * 6

* 4 5 6 *

4 * 6 * 8

5 6 * 8 9

Буду премного благодарен за ответ, уже бьюсь около месяца над задачей, никак решить всей группой не можем.

Заранее спасибо)
Как всё сложно. Решение должно быть красивым!

Вот http://ideone.com/cZMbPY заполнение матрицы произвольного размера.
Вместо заполнения можно переделать на подсчет сумм.
Удафф Убийца
Удафф Убийца
11 112
Лучший ответ
using System;
namespace Example {
public class Program {
static void Main() {
Random rnd = new Random();
int range = 5;
int[][] matrix = new int[range][];
for (int r = 0; r < range; ++r) {
matrix[r] = new int[range];
for (int c = 0; c < range; ++c) matrix[r][c] = rnd.Next(1, 10);
}
Print(matrix);
if (range % 2 != 0) {
Console.WriteLine("Вариант со звёздочками: {0}", SimIn(matrix));
Console.WriteLine("Вариант без звёздочек: {0}", SimOut(matrix));
}
Console.ReadKey();
}
static void Print(int[][] matrix) {
int range = matrix.GetLength(0);
for (int r = 0; r < range; ++r) {
for (int c = 0; c < range; ++c) Console.Write("{0,3}", matrix[r][c]);
Console.WriteLine();
}
}
static int SimIn(int[][] matrix) {
int range = matrix.GetLength(0);
int sum = Sum(matrix);
int tmp = 0;
int midRow = range >> 1;
int left = midRow;
int right = midRow;
for (int r = 0; r < range; ++r) {
for (int c = 0; c < range; ++c) {
if (c == left || c == right) continue;
tmp += matrix[r][c];
}
if (r < midRow) {
++right;
--left;
} else {
--right;
++left;
}
}
return sum - tmp;
}
static int SimOut(int[][] matrix) { return Sum(matrix) - SimIn(matrix); }
static int Sum(int[][] matrix) {
int sum = 0;
int range = matrix.GetLength(0);
for (int r = 0; r < range; ++r) for (int c = 0; c < range; ++c) sum += matrix[r][c];
return sum;
}
}
}
Денис Гусев
Денис Гусев
60 825
Если в условии точно заданно что n - нечетное число, тогда все просто.

int sum = 0;

for(int i = 0; i < n / 2; i++)
for(int j = 0; j < n / 2; j++)
{
sum += a[n / 2 + i + 1, j];
sum += a[n / 2 + i + 1, n - j];
sum += a[i, n / 2 + j + 1];
sum += a[n - i, n / 2 + j + 1];
}