解法1:
题目思路
java代码
import java.util.Scanner;
public class Main{
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt(),m= sc.nextInt();
int [][]a=new int[n+1][m+1];
int cnt=1,x=Math.min(m+1,n+1)/2;
for(int i=1;i<=x;i++)//层数
{
for(int j=i;j<=m-i+1;j++)//1横向向右
{
if(a[i][j]>0)break;//防止已经填过的被覆盖重复填
a[i][j]=cnt;
cnt++;
}
for(int j=i+1;j<=n-i+1;j++)//2竖直向下
{
if(a[j][m-i+1]>0)break;//防止已经填过的被覆盖重复填
a[j][m-i+1]=cnt;
cnt++;
}
for(int j=m-i;j>=i;j--)//3横向向左
{
if(a[n-i+1][j]>0)break;//防止已经填过的被覆盖重复填
a[n-i+1][j]=cnt;
cnt++;
}
for(int j=n-i;j>=i+1;j--)//4竖直向上
{
if(a[j][i]>0)break;//防止已经填过的被覆盖重复填
a[j][i]=cnt;
cnt++;
}
}
for(int i=1;i<=n;i++) {
for (int j = 1; j <= m; j++)
System.out.print(a[i][j] + " ");
System.out.println();
}
}
}
解法2
题目思路
javascript代码
let buf = "";
process.stdin.on("readable",function(){
let chunk = process.stdin.read();
if(chunk) buf += chunk.toString();
})
process.stdin.on("end",function(){
let [n,m]=buf.split(' ').map(x=>{return parseInt(x)});
let res=[];
for(let i=0;i<n;i++)
{
res[i]=[];
for(let j=0;j<m;j++)
{
res[i].push(0);
}
}
let dx=[-1,0,1,0],dy=[0,1,0,-1];
let x=0,y=0,d=1;
for(let i=1;i<=n*m;i++)
{
res[x][y]=i;
let a=x+dx[d];
let b=y+dy[d];
if( a>=n || a<0 || b<0 || b>=m || res[a][b]!==0)
{
d=(d+1)%4;
a=x+dx[d];
b=y+dy[d];
}
x=a;
y=b;
}
for(let i=0;i<n;i++)
{
let line="";
for(let j=0;j<m;j++)
{
line += `${res[i][j]} `;
}
console.log(line);
}
})