另外一种思路,按横纵向离中心点远的坐标算步长。 照搬了1搂不少代码~谢谢咯 public static void main(String[] _s) { System.out.print("请输入矩阵的阶数:"); Scanner sc = new Scanner(System.in); int m = sc.nextInt(), n = 2 * m - 1; int[][] data = new int[n + 1][n + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { int k = (j - m) * (j - m) - (i - m) * (i - m) > 0 ? j : i; data[i][j] = (k - m) > 0 ? k - m + 1 : m - k + 1; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { System.out.print(data[i][j] + " "); } System.out.println(); } }
import java.util.*; public class Cube { public static void main(String[] args) { System.out.print("请输入矩阵的阶数:"); Scanner sc = new Scanner(System.in); int m = sc.nextInt(), n = 2 * m - 1; int t=m; int[][] data = new int[n][n]; for(int k =0;k<n; k++) { for (int j = k; j <n - k; j++) { data[k][j] = t; data[j][k] = t; data[n-k-1][j] = t; data[j][n-k-1] = t; } t--; } for (int i = 0; i <n; i++) { for (int j = 0; j < n; j++) { System.out.print(data[i][j]+" "); } System.out.println(); } } }
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
System.out.print("请输入矩阵的阶数:");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt(), n = 2 * m - 1;
int[][] data = new int[n + 1][n + 1];
int x = 1, y = n;
for (int k = m; k >= 1; k--) {
for (int j = x; j <= n - x + 1; j++) {
data[x][j] = k;
data[y][j] = k;
data[j][x] = k;
data[j][y] = k;
}
x++;
y--;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
System.out.print(data[i][j]+" ");
}
System.out.println();
}
}
}
运行结果:
请输入矩阵的阶数:4
4 4 4 4 4 4 4
4 3 3 3 3 3 4
4 3 2 2 2 3 4
4 3 2 1 2 3 4
4 3 2 2 2 3 4
4 3 3 3 3 3 4
4 4 4 4 4 4 4
int shiftIdx = idx -1; //中心為0比較容易計算
//讓中心點為座標的 0,0
for(int i=-shiftIdx;i<=shiftIdx;i++){
for(int j=-shiftIdx;j<=shiftIdx;j++){
//因為最上面減一,所以這裡加一
System.out.print(Math.max(Math.abs(i),Math.abs(j))+1);
}
System.out.println();
}
#include <stdio.h>
#define Max 9 //定义上限
void main()
{
int a[Max][Max]={0};
int i,j,n,k=1;
printf("输入一个奇数(3~9) :");
scanf("%d",&n);
i=0;j=n/2;
a[i][j]=k;
while(1)
{
k++;
i=i-1;
j=j+1;
if(i<0) i=n-1;
if(j==n) j=0;
if(a[i][j]!=0)
{
i=i+1;
a[i][j]=k;
}
else a[i][j]=k;
if(k==n*n)
break;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
printf("\n");
}
照搬了1搂不少代码~谢谢咯 public static void main(String[] _s) {
System.out.print("请输入矩阵的阶数:");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt(), n = 2 * m - 1;
int[][] data = new int[n + 1][n + 1]; for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
int k = (j - m) * (j - m) - (i - m) * (i - m) > 0 ? j : i;
data[i][j] = (k - m) > 0 ? k - m + 1 : m - k + 1;
}
} for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
System.out.print(data[i][j] + " ");
}
System.out.println();
}
}
public class Cube
{
public static void main(String[] args)
{
System.out.print("请输入矩阵的阶数:");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt(), n = 2 * m - 1;
int t=m;
int[][] data = new int[n][n];
for(int k =0;k<n; k++) {
for (int j = k; j <n - k; j++) {
data[k][j] = t;
data[j][k] = t;
data[n-k-1][j] = t;
data[j][n-k-1] = t;
}
t--;
}
for (int i = 0; i <n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(data[i][j]+" ");
}
System.out.println();
}
}
}