Предполагая, что «поворот на 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.