Member 14032443 Ответов: 2

Сделать шаблон в программе C#


вход :
N=4
Выход:
1  2  3  4
12 13 14 5
11 16 15 6
10 9  8  7


Что я уже пробовал:

я уже использовал вложенный цикл и массив, но это не сработало.

CHill60

Мы не можем сказать, в чем ваша проблема, из-за столь малой информации. Используйте ссылку "улучшить вопрос", чтобы объяснить свою проблему

2 Ответов

Рейтинг:
2

CPallini

Желая победить мертвую лошадь, я добавляю свое решение без массива.

public static int ring_contribution(int d, int x, int y)
{
  if (y == -d)
    return (d - 1) + (d + x) / 2;
  else if (y == d)
    return (d - 1) + 2 * d + (d - x) / 2;
  else if (x == -d)
    return (d - y) / 2 - 1;
  else
    return 2 * d + (d + y) / 2 - 1;
}
public static void Main()
{
  Console.WriteLine("plaese enter the dimension");
  string line = Console.ReadLine();
  int n;
  if (!int.TryParse(line, out n)) return;

  int n2 = n * n;
  int N = n - 1;
  for (int y = N; y >= -N; y -= 2)
  {
    for (int x = -N; x <= N; x += 2)
    {
      int d = Math.Max(Math.Abs(x), Math.Abs(y)); // distance
      int v = (d - 1) * (d - 1); // inner squares contribution
      v += ring_contribution(d, x, y); // outer ring contribution
      Console.Write("{0,4:####}", n2-v);
    }
    Console.WriteLine();
  }
}


Рейтинг:
16

OriginalGriff

Во-первых, вам нужно создать массив для хранения значений (поскольку они не следуют в последовательности, которую можно легко распечатать на консоли, вы должны поместить их в массив, а затем распечатать их, когда он будет завершен.)
Сделайте массив 2-мерным: N x N

int[,] data = new int[N, N];
И он будет предварительно заполнен нулями.
Создайте пару индексаторов x и y и начните их с нуля.
Также создайте еще несколько целых чисел, называемых dx и dy, и установите dx в 1, а dy в ноль.
Теперь выполните цикл от 0 до (N * N) - 1 раз для переменной с именем i
Внутри цикла установите значение data[x, y] равным i + 1,
Затем добавьте dx к x и dy к y и посмотрите на результаты.
Если x и y находятся внутри массива, посмотрите на элемент, на который они теперь указывают. Если он равен нулю, то он пуст, так что все в порядке
В противном случае, вам нужно изменить направление.

Значения dx и dy определяют, в каком направлении вы будете двигаться, поэтому посмотрите на них, и должно быть довольно очевидно, как вам нужно их изменить: (1, 0) становится (0, 1); (0, 1) становится (-1, 0); (-1, 0) становится (0, -1), и (0, -1) снова становится (1, 0).

Попробуйте на бумаге, и вы поймете, что я имею в виду. Немного подумав, это не должно быть трудно преобразовать в код!


Maciej Los

Превосходно!

CPallini

5.