输入一个方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<1000)次后的方阵,要求:
(1)输入第一行一个正整数(0<N<10)
(2)接下来N行每行N个整数用空格分开,为方阵的数据
(3)接下来一行一个正整数M(0<=M<=10000)
示例:
-- 输入
1 2 3
4 5 6
7 8 9
-- 输出
9 8 7?
6 5 4
3 2 1
说明:不用考虑输入,所有输入都是正常的,严格遵从取值范围。
代码思想:
每一行转为最后一列,依次指向,直至覆盖整个矩阵
?针对于3阶矩阵:
if (i == 0) { //数组第一行
for (int j = 0; j < array.length; j++) {
array[j][2] = arrayOri[0][j];
}
}
if (i == 1) { //数组第二行
for (int j = 0; j < array.length; j++) {
array[j][1] = arrayOri[1][j];
}
}
if (i == 2) { //数组第三行
for (int j = 0; j < array.length; j++) {
array[j][0] = arrayOri[2][j];
}
}
对于n阶矩阵:
for (int q = 0; q < n; q++) {
if(i == q){
for (int j = 0; j < array.length; j++) {
array[j][array.length-1-q] = arrayOri[q][j];
}
}
}
完整代码如下:?
public class Test {
public static void main(String[] args) {
//先创建一个2维数组
Scanner sc = new Scanner(System.in); //输入流
System.out.println("请输入方阵的阶数;");
int n = sc.nextInt(); //输入阶数
int[] arrayOri[] = new int[n][n]; //原始输入数组
int[] array[] = new int[n][n]; //转换之后的数组
System.out.println("-- 输入");
for (int i = 0; i < arrayOri.length; i++) {
for (int j = 0; j < arrayOri.length; j++) {
arrayOri[i][j] = sc.nextInt();
array[i][j] = arrayOri[i][j];
}
}
System.out.println("请输入该方阵顺时针旋转的次数:");
int m = sc.nextInt();
for (int p = 1; p <= m; p++) {
for (int i = 0; i < array.length; i++) {
for (int q = 0; q < n; q++) {
if(i == q){
for (int j = 0; j < array.length; j++) {
array[j][array.length-1-q] = arrayOri[q][j];
}
}
}
}
}
System.out.println("-- 输出");
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
}
测试结果:
?