数字旋转方阵:
要求:输入一个整数N(4《=N《=15)
输出要求如下:每个子的输出宽度为4
用递归实现,一圈一圈来填充 没一圈填充都包括向下,向右,向上,向左四种操作,还要注意一圈完成无调用下一圈的参数
import java.util.Scanner;
//数字旋转方阵
public class DigitTurn {
private static int n;//方阵的行和列
private static int[][] a;//保存方阵的值
private static int number=1;//填充的数字
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
a=new int[n][n];
f(0,n-1);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
System.out.printf("%4d",a[i][j]);
}
System.out.println();
}
}
//begin该圈开始的位置(行和列相同) size是填充一圈需要四步,四步需要执行的次数
public static void f(int begin,int size)
{
if(size<0)
return;
if(size==0)//最后一圈只剩下一个元素
{
a[begin][begin]=number;
return;
}
int h=begin,l=begin;
//向下
for(int i=1;i<=size;i++)
{
a[h][l]=number;
number++;
h++;
}
//向右
for(int i=1;i<=size;i++)
{
a[h][l]=number;
number++;
l++;
}
//向上
for(int i=1;i<=size;i++)
{
a[h][l]=number;
number++;
h--;
}
//向左
for(int i=1;i<=size;i++)
{
a[h][l]=number;
number++;
l--;
}
//继续下一圈
f(l+1,size-2);
}
}
数组旋转上三角
数字方阵大小是N * N;
要求:输入一个整数N(4《=N《=15)
输出要求如下:每个子的输出宽度为4
用递归实现,一圈一圈来填充 没一圈填充都包括向下,斜向上,向左四种操作,还要注意一圈完成无调用下一圈的参数
import java.util.Scanner;
//数字旋转上三角
public class DigitTurn2 {
private static int n;//方阵的行和列
private static int[][] a;//保存方阵的值
private static int number=1;//填充的数字
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
a=new int[n][n];
f(0,n-1);
int nn=n;
for(int i=0;i<n;i++)
{
for(int j=0;j<nn;j++)
{
System.out.printf("%4d",a[i][j]);
}
nn--;
System.out.println();
}
}
//begin该圈开始的位置(行和列相同) size是填充一圈需要四步,四步需要执行的次数
public static void f(int begin,int size)
{
if(size<0)
return;
if(size==0)//最后一圈只剩下一个元素
{
a[begin][begin]=number;
return;
}
int h=begin,l=begin;
//向下
for(int i=1;i<=size;i++)
{
a[h][l]=number;
number++;
h++;
}
//斜向上
for(int i=1;i<=size;i++)
{
a[h][l]=number;
number++;
l++;
h--;
}
//向左
for(int i=1;i<=size;i++)
{
a[h][l]=number;
number++;
l--;
}
//调用下一圈
f(l+1,size-3);
}
}