Поверните элементы матрицы против часовой стрелки на java - PullRequest
0 голосов
/ 27 марта 2020

Как мы можем повернуть матрицу 5X5 в противоположном направлении по часовой стрелке на 45 градусов?

Входной сигнал будет выглядеть следующим образом

          00100
          00100
          11111
          00100
          00100

, а выходной сигнал должен выглядеть следующим образом

          10001
          01010
          00100
          01010
          10001

Что я сделал до сих пор, так это то, что я прочитал элементы массива 5X5, теперь я застрял с логикой c вращения

Мой код такой, как показано ниже

import java.awt.Point;
import java.util.Scanner;

public class RotateMatrix {
    public static void main(String a[]) {
        int[][] original = new int[5][5];
        int[][] rotate = new int[5][5];
        String helper[] = new String[5];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 5; i++) {
            helper[i] = sc.next();
        }
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                original[i][j] = Integer.parseInt(String.valueOf(helper[i].charAt(j)));
            }
        }

    }

}

1 Ответ

1 голос
/ 27 марта 2020

Предполагая, что «поворот на 45 градусов» означает, что записи на внешней границе должны оставаться на внешней границе, вам нужно сделать следующее:

  • повернуть внешнее кольцо 5x5 на 2 позиции
  • поверните внутреннее кольцо 3x3 на 1 позицию

Внешнее кольцо 5x5 вращается следующим образом:

    01234     23456
    F   5     1   7
    E   6 =>  0   8
    D   7     F   9
    CBA98     EDCBA

Вы можете сделать это вращение с помощью для l oop , Этот пример показывает верхнюю, правую и нижнюю стороны в качестве примера:

for (int i = 0; i < 5; i++) {
  if (i < 3) {
    rotate[0][i] = original[0][i+2]; // TOP
    rotate[i][4] = original[i+2][4]; // RIGHT
    rotate[4][4-i] = original[4][4-(i+2)]; // BOTTOM
  } else {
    rotate[0][i] = original[i-2][4]; // TOP
    rotate[i][4] = original[4][4-(i-2)]; // RIGHT
    rotate[4][4-i] = original[4-(i-2)][0]; // BOTTOM
  }
}

Как только вы добавите код для заполнения левой части rotate и код для поворота внутреннего кольца 3x3, все готово!

Это может быть довольно много кода. Возможно, вы захотите создать метод, который вращает произвольное кольцо матрицы на 1. Затем вы вызываете этот метод 3 раза: один раз для внутреннего кольца и два раза для внешнего кольца, чтобы он вращался на 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...