仅供娱乐 int i=5; //打印出下面图形 1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
int i=6 ;//打印出下面图形 1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
int i=6 ;//打印出下面图形 1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
int num = 5;
int[][] b = getS(num);
for(int i=0;i<num;i++){
for(int j=0;j<num;j++){
System.out.println("b["+i+"]["+j+"] = "+b[i][j]);
}
}
}
public static int[][] getS(int num){
int[][] intA = new int[num][num];
int n = 0;
if(num%2!=0){
intA[num/2][num/2] = num * num ;
}
int k=1;
for(int i=0;i<num/2;i++){
int m = 0;
while(m!=4){
if(m == 0){
for(int j = i;j<num-1-i;j++){
intA[i][j] = k;
k++;
}
}
if(m == 1){
for(int j = i;j<num-1-i;j++){
intA[j][num-1-i] = k;
k++;
}
}
if(m == 2){
for(int j = num-1-i;j>i;j--){
intA[num-1-i][j] = k;
k++;
}
}
if(m == 3){
for(int j = num-1-i;j>i;j--){
intA[j][i] = k;
k++;
}
}
m = m + 1 ;
}
}
return intA;
}
public static void main(String[] args) throws ClassNotFoundException {
int num = 6;
int[][] b = getS(num);
for(int i=0;i<num;i++){
for(int j=0;j<num;j++){
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
public static void main(String args[]){
setValue(20,20);
}
public static void setValue(int width,int height){
int nums[][] = new int[width][height];
int direction = 0;// 0:右 1:下 2:左 3:上
int ind_x = 0;
int ind_y = 0; for (int i = 0; i < width * height; i++) {
nums[ind_x][ind_y] = i + 1;
int []p = getFuturePos(direction,ind_x,ind_y);
if(p[0] < 0 || p[0] >= width || p[1] < 0 || p[1] >= height || nums[p[0]][p[1]] != 0){
++ direction;
p = getFuturePos(direction,ind_x,ind_y);
}
ind_x = p[0];
ind_y = p[1];
}
for (int i = 0; i < nums[0].length; i++) {
for (int j = 0; j < nums[1].length; j++) {
System.out.print(nums[i][j] + "\t");
}
System.out.println();
}
}
public static int[] getFuturePos(int direction ,int x ,int y){
int []p = new int[2];
p[0] = x;
p[1] = y;
switch(direction % 4){
case 2: //左
--p[1] ;
break;
case 3://上
--p[0];
break;
case 1: //下
++p[0];
break;
case 0: //右
++p[1];
break;
}
return p;
}
int[][] myMatrix; public Matrix(int n) {
myMatrix = new int[n][n]; for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
myMatrix[i][j] = 0;
}
}
} static void print(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
if (matrix[i][j] < 10)
System.out.print("0" + matrix[i][j] + " ");
else
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
} public void fun(int size) {
int[] flag = new int[] { 0, 1, 2, 3 };//右,下,左,上
int total = size * size;
int n = 1;
int width = size - 1,height = size - 1;//当前需要填充矩阵的宽,高
int startW = 0,startH = 0;//当前需要填充矩阵的起始宽,高
int now = 0;//方向指示标志
while (n <= total) {
switch (flag[now % flag.length]) {
case 0:
for(int i = startW,j = startW;j <= width;j++)
myMatrix[i][j] = n++;
startH++;
break;
case 1:
for(int i = startH,j = height;i <= height;i++)
myMatrix[i][j] = n++;
width--;
break;
case 2:
for(int i = height,j = width;j >= startW;j--)
myMatrix[i][j] = n++;
height--;
break;
case 3:
for(int i = height,j = startW;i >= startH;i--)
myMatrix[i][j] = n++;
startW++;
break;
}
now++;
}
}
public static void main(String[] args) {
Matrix matrix = new Matrix(5);
matrix.fun(5);
print(matrix.myMatrix);
System.out.println();
matrix = new Matrix(6);
matrix.fun(6);
print(matrix.myMatrix);
}
}
public static void main(String[] args) {
matrix(5);
System.out.println();
matrix(6);
} public static void matrix(int n) {
if (n < 1) {return;}
int[][] m = new int[n][n];
for (int i=0, r=0, c=0, rb=n, cb=n, rf=0, cf=1; i<n*n; i++) {
m[r][c] = i+1; c += cf;
r += rf; if (c==cb-1 && cf==1) { /* 横向控制(右边界) */
cf = 0;
rf = 1;
} else if (c==n-cb && cf==-1) { /* 左边界 */
cb--;
cf = 0;
rf = -1;
} if (r==rb-1 && rf==1) { /* 纵向控制 (下边界)*/
rf = 0;
cf = -1;
} else if (r==n-rb && rf==-1) { /* 上边界 */
rb--;
rf = 0;
cf = 1;
r++;
c++;
}
} for (int i=0; i<n; i++) { /* 结果打印 */
for (int j=0; j<n-1; j++) {
System.out.printf("%2d ", m[i][j]);
}
System.out.printf("%2d\n", m[i][n-1]);
}
}
}
import java.io.Reader;
import java.util.Scanner;public class MonkeyAndPeach {
public static int dimension = 0;//输出数组的维数
public static int a[][] = null;//存放输出数组
public static int step = 1;//起始数字为1
public static int level = 0;//最外层为第0层 public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("please input one integer:");
dimension = reader.nextInt();
init();
while (level < dimension - level - 1)// 从最外层开始由外到里逐层遍历
traverse(level++);
if (level == dimension - level - 1) {// 当维数为奇数时,有一个中心点,此时直接赋值
a[level][level] = step;
}
output();
} public static void init() {
a = new int[dimension][dimension];
} public static void output() {
for (int i = 0; i < dimension; i++) {
for (int j = 0; j < dimension; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
System.out.println();
}
} public static void traverse(int level) {
for (int i = level; i < dimension - level - 1; i++)
a[level][i] = step++;
for (int i = level; i < dimension - level - 1; i++)
a[i][dimension - level - 1] = step++;
for (int i = level; i < dimension - level - 1; i++)
a[dimension - level - 1][dimension - i - 1] = step++;
for (int i = level; i < dimension - level - 1; i++)
a[dimension - i - 1][level] = step++;
}}
public class RollingMatrix {
public static int[][] rolling(int[][] is, int depth, int x) {
int n = is.length-2*depth;
if (n<=0) return is;
for (int i=depth; i<depth+n; i++) is[depth][i] = x++;
for (int i=depth+1; i<depth+n-1; i++) is[i][depth+n-1] = x++;
for (int i=depth+n-1; i>depth; i--) is[depth+n-1][i] = x++;
for (int i=depth+n-1; i>depth; i--) is[i][depth] = x++;
return rolling(is, depth+1, x);
}
public static void main(String[] args) {
int[][] is = rolling(new int[4][4], 0, 1);
for (int i=0; i<is.length; i++)
for (int j=0; j<is.length; j++) System.out.print(is[i][j] + (j==is.length-1?"\r\n":" "));
}
}
private void houzitoutao(int h) {
// TODO Auto-generated method stub
int value=1;
int quanshu=(h+1)/2;
int ai=0,aj=0;
int shouhang=h;
int [][]a=new int[h][h];
for(int i=0;i<h;i++){
for(int j=0;j<h;j++){
a[i][j]=0;
}
}
out: for(int q=1;q<=quanshu;q++){
//上
for(int i=1;i<=shouhang;i++){
a[ai][aj]=value;
if(value==h*h) break out;
aj++;
value++;
}
ai=ai+1;
aj--;
//右
for(int i=1;i<=shouhang-1;i++){
a[ai][aj]=value;
ai++;
value++;
}
aj=aj-1;
ai--;
//下
for(int i=1;i<=shouhang-1;i++){
a[ai][aj]=value;
if(value==h*h) break out;
aj--;
value++;
}
aj++;
ai--;
//左
for(int i=1;i<=shouhang-2;i++){
a[ai][aj]=value;
ai--;
value++;
}
ai++;
aj++;
//最后
shouhang=shouhang-2;
}
for(int i=0;i<h;i++){
for(int j=0;j<h;j++){
System.out.print(String.format("%5d", a[i][j]));
}
System.out.println();
System.out.println();
}
}
public static void main(String[] args) {
int size = 10; int[][] arr = new int[size][size];
int num = 1;
int maxnum = size * size;
int min = 0;
int max = size - 1; int x = 0;
int y = 0; while (num < maxnum) {
//上
for (; y < max; y++) {
arr[x][y] = num++;
} //右
for (; x < max; x++) {
arr[x][y] = num++;
} //下
for (; y > min; y--) {
arr[x][y] = num++;
} //左
for (; x > min; x--) {
arr[x][y] = num++;
}
x++;
y++;
max--;
min++;
}
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.printf("%4d ", arr[i][j]);
}
System.out.print("\r\n");
}
}我也来一段
int size = 8; int[][] arr = new int[size][size]; int num = 1;
int maxnum = size * size; int min = 0;
int max = size - 1; int x = 0;
int y = 0; while (num < maxnum) {
// 上
for (; y < max; y++) {
arr[x][y] = num++;
} // 右
for (; x < max; x++) {
arr[x][y] = num++;
} // 下
for (; y > min; y--) {
arr[x][y] = num++;
} // 左
for (; x > min; x--) {
arr[x][y] = num++;
} x++;
y++; max--;
min++;
} //恰好位于正方形中心时
if (x == y && max == min && x == max) {
arr[x][y] = maxnum;
} for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.printf("%4d ", arr[i][j]);
}
System.out.print("\r\n");
}
}
{
int num;
cout<<"请输入图形行数:";
cin>>num;
int **M=new int*[num];//申请数组空间
for(int i=0;i<num;i++)//申请数组空间
M[i]=new int[num];
for(i=0;i<num;i++)//全部清零,为下一步做准备
for(int j=0;j<num;j++)
M[i][j]=0;
int di=1;//方向
int j;
i=j=0;
for(int tmp=0;tmp<num*num;tmp++)
{
M[i][j]=tmp+1;
switch(di)//向前探测道路是否可行,不可行则变向
{
case 1:
if((j+1)>=num||(M[i][j+1]!=0)) di=2;break;
case 2:
if((i+1)>=num||(M[i+1][j]!=0)) di=3;break;
case 3:
if((j-1)<0||(M[i][j-1]!=0)) di=4;break;
case 4:
if((i-1)<0||(M[i-1][j]!=0)) di=1;break;
}
switch(di)//经上一步探测,向前走一步
{
case 1:
j++;break;
case 2:
i++;break;
case 3:
j--;break;
case 4:
i--;break;
}
}
for(i=0;i<num;i++)//打印图形
{
for(j=0;j<num;j++)
cout<<M[i][j]<<'\t';
cout<<endl;
}
}
//很久之前写的
#include <iostream>
using namespace std;
#define MAX 100;
enum DIRECTION{LEFT,RIGHT,UP,DOWN};
int main(){
int N;
int arr[100][100];
int i=0,j=0;
int x=0,y=0;
DIRECTION direction=RIGHT;
cout<<"请输入一个整数:";
cin>>N;
//初始化边界
for(i=0;i<N;++i){
for(j=0;j<N;j++) arr[i][j]=0;
}
arr[0][0]=1;
for(i=0;i<=N*N-1;){
arr[x][y]=++i;
switch(direction){
case RIGHT://当向右移时
if(x<N-1&&arr[x+1][y]==0) {
x++;
break;}
else{
direction=DOWN;
y++;
break;}
case DOWN://向下移时
if(y<N-1&&arr[x][y+1]==0) {
y++;
break;}
else{
direction=LEFT;
x--;
break;}
case LEFT://向左移时
if(x>0&&arr[x-1][y]==0){
x--;
break;}
else{
direction=UP;
y--;
break;}
case UP://向上移动时
if(y>0&&arr[x][y-1]==0) {
y--;
break;}
else{
direction=RIGHT;
x++;
break;}
} }
//输出数组
cout<<"\n"<<N<<"\n";
for(i=0;i<N;i++){
cout<<"\n";
for(j=0;j<N;j++) cout<<arr[j][i]<<" ";
}
return 0;
}
public static void main(String[] args)
{
int i, j;
int[][] array = new int[7][7];
int k = 1;
int n = 7; // 螺旋数长度 可以执行自己输入长度
for(i = 0; i < (n / 2); i++)
{
for(j = i; j < n - 1 - i; j++) // 上侧
{
array[i][j] = k;
k++;
}
for(j = i; j < n -1 - i; j++) // 右侧
{
array[j][n - 1 - i] = k;
k++;
}
for(j = n - 1 - i; j > i; j--) //下侧
{
array[n - 1 - i][j] = k;
k++;
}
for(j = n - 1 - i; j > i; j--) //左侧
{
array[j][i] = k;
k++;
}
}
if(n % 2 == 1) // 奇数是中间的一个数
{
i = (n) / 2;
array[i][i] = n * n;
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}