導航:首頁 > 編程語言 > 螺旋矩陣java

螺旋矩陣java

發布時間:2022-07-29 06:23:55

java螺旋矩陣

public class SpiralNumber {

/**
* @param args
*/
public static void main(String[] args) {

int number = 8;
int colNumber = number;

int[][] arys = printCircle(number);

for (int i = 0; i < number; i++) {
for (int j = 0; j < colNumber; j++) {
System.out.print(arys[i][j] + "\t");
}
colNumber--;

System.out.println();
}
}

private static int[][] printCircle(int number) {

int[][] ary = new int[number][number];

int rightLen;
int downLen;
int upLen;

int rightRow = 0;
int rightCol = 0;
int downRow = 1;
int downCol = number - 2;
int upRow = number - 2;
int upCol = 0;

int digit = 1;

while (number > 0) {

rightLen = number;
downLen = number - 1;
upLen = number - 2;

// Step 1: print to right
for (int i = 0, temp = rightCol; i < rightLen; i++) {
ary[rightRow][temp++] = digit++;
}

// Step 2: print to down
for (int j = 0, temp = downRow, colTemp = downCol; j < downLen; j++) {
ary[temp++][colTemp--] = digit++;
}

// move up
for (int n = 0, temp = upRow; n < upLen; n++) {
ary[temp--][upCol] = digit++;
}

number = number - 3;

// increas/decrease the row and column
rightRow++;
rightCol++;
downRow++;
downCol = downCol - 2;
upRow = upRow - 2;
upCol++;

}

return ary;

}

}

Ⅱ java螺旋矩陣求助!

package cn.com.micc.javatwo; //根據實際情況修改

//蝸牛螺旋矩陣 請仔細研究矩陣階數變化時數據的遷移規律
//上一階矩陣會"整體"向右上或左下移動

public class AntiClockWiseArray {
public static int[][] getResult(int n) {
int[][] n1 = new int[1][1];
n1[0][0] = 1;

if (n == 1)
return n1;

int[][] result = new int[n][n];
int[][] temp = getResult(n - 1);

if (0 == (n - 1) % 2)
result = LeftDownMove(temp, n - 1); //n-1階矩陣向左下移動
else
result = RightUpMove(temp, n - 1); //n-1階矩陣向右上移動

return result;
}

public static int[][] LeftDownMove(int[][] in, int moment) {
int temp = moment * moment;
int nums = moment * 2 + 1;

int[][] out = new int[moment + 1][moment + 1];

//新矩陣補入上一階矩陣的值
for (int i = 0; i < moment; ++i)
for (int j = 0; j < moment; ++j)
out[i + 1][j] = in[i][j];

//兩個循環添加新矩陣新值
for (int k = 0; k < moment + 1; ++k)
out[0][k] = temp + nums - k;
for (int l = 1; l < moment + 1; ++l)
out[l][moment] = temp + nums - moment - l;

return out;
}

public static int[][] RightUpMove(int[][] in, int moment) {
int temp = moment * moment;
int nums = moment * 2 + 1;

int[][] out = new int[moment + 1][moment + 1];

//新矩陣補入上一階矩陣的值
for (int i = 0; i < moment; ++i)
for (int j = 0; j < moment; ++j)
out[i][j + 1] = in[i][j];

//兩個循環添加新矩陣新值
for (int k = 0; k < moment + 1; ++k)
out[k][0] = temp + 1 + k;
for (int l = 1; l < moment + 1; ++l)
out[moment][l] = temp + moment + 1 + l;

return out;
}

public static void printArray(int[][] temp, int n) {

//格式化列印矩陣
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
System.out.printf("%5d", temp[i][j]);
System.out.println();
}
}
public static void main(String[] args) {
printArray(getResult(6), 6); //輸入階數
}
}

output:

10階

82 81 80 79 78 77 76 75 74 73
83 50 49 48 47 46 45 44 43 72
84 51 26 25 24 23 22 21 42 71
85 52 27 10 9 8 7 20 41 70
86 53 28 11 2 1 6 19 40 69
87 54 29 12 3 4 5 18 39 68
88 55 30 13 14 15 16 17 38 67
89 56 31 32 33 34 35 36 37 66
90 57 58 59 60 61 62 63 64 65
91 92 93 94 95 96 97 98 99100

Ⅲ 急!求JAVA螺旋矩陣的N*N演算法(必須能運行的!!)

呵呵,大一做過的
package bao;

public class Juzhen {
public static void main(String[] args){
int k=1,i=0,j=0,m=0;
System.out.println("輸入矩陣大小:");
int n=SavitchIn.readLineInt();
int[][] A=new int[n][n];
for(m=0;m<n;m++){
for(i=m,j=m;j<n-m;j++){
A[i][j]=k;k++;
}j--;
for(i=i+1;i<n-m;i++){
A[i][j]=k;k++;
}i--;
for(j=j-1;j>=m;j--){
A[i][j]=k;k++;
}j++;
for(i=i-1;i>m;i--){
A[i][j]=k;k++;
}i++;
}
for(int a=0;a<n;a++){
for(int b=0;b<n;b++){
System.out.print(A[a][b]+"\t");
}
System.out.println();
}
}
}

其中SavitchIn為
public class SavitchIn
{

/***
*Reads a line of text and returns that line as a String value.
*The end of a line must be indicated either by a new-line
*character '\n' or by a carriage return '\r' followed by a
*new-line character '\n'. (Almost all systems do this
*automatically. So, you need not worry about this detail.)
*Neither the '\n', nor the '\r' if present, are part of the
*string returned. This will read the rest of a line if the
*line is already partially read.
****/
public static String readLine()
{
char nextChar;
String result = "";
boolean done = false;

while (!done)
{
nextChar = readChar();
if (nextChar == '\n')
done = true;
else if (nextChar == '\r')
{
//Do nothing.
//Next loop iteration will detect '\n'
}
else
result = result + nextChar;
}

return result;
}
public static int readLineInt()
{
String inputString = null;
int number = -9999;//To keep the compiler happy.
//Designed to look like a garbage value.
boolean done = false;

while (! done)
{
try
{
inputString = readLine();
inputString = inputString.trim();
number = Integer.parseInt(inputString);
done = true;
}
catch (NumberFormatException e)
{
System.out.println(
"Your input number is not correct.");
System.out.println("Your input number must be");
System.out.println("a whole number written as an");
System.out.println("ordinary numeral, such as 42");
System.out.println("Minus signs are OK,"
+ "but do not use a plus sign.");
System.out.println("Please, try again.");
System.out.println("Enter a whole number:");
}
}

return number;
}
}

Ⅳ 求用java語言輸出n*m階螺旋矩陣

height就相當於n
width就相當於m

public class SpiralMatrixMaker {
public static void main(String[] args) {
int max = 20;
int i = 0, j = 0;
int height = 3;
int width = 4;
int[][] a = new int[max][max];

int m = 1, s = 1;
int x1 = 0;
int y1 = 0;
int x2 = height;
int y2 = width;
while (true) {
if (s == 1) {
for (; j < y2; j++) {
a[i][j] = m++;
}
j--;
i++;
y2--;
for (; i < x2; i++) {
a[i][j] = m++;
}
i--;
j--;
x2--;
s = -1;
} else {
for (; j >= y1; j--) {
a[i][j] = m++;
}
j++;
i--;
y1++;
for (; i >= x1 + 1; i--) {
a[i][j] = m++;
}
i++;
j++;
x1++;
s = 1;
}
if (m > height * width) {
break;
}
}
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
System.out.print(a[i][j]);
System.out.print("\t");
}
System.out.println();
}
}
}

Ⅳ 怎麼編寫JAVA螺旋矩陣

按照你的要求用Java編寫的螺旋矩陣程序如下:
public class N {
public static void main(String[] args) {
final int N=4;
int a[][]=new int[N][N];
int num=1;
int i=0,j=0,m=0;
if(N%2==0)
m=N/2;
else
m=N/2+1;
for(i=0;i<=m-1;i++){
for(j=i;j<=N-i-1;j++){
a[i][j]=num;
num++;
}
for(j=i+1;j<=N-i-1;j++) {
a[j][N-i-1]=num;
num++;
}
for(j=N-i-2;j>=i;j--){
a[N-i-1][j]=num;
num++;
}
for(j=N-i-2;j>=i+1;j--){
a[j][i]=num;
num++;
}
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
System.out.print(String.format("%3d",a[i][j]));
}
System.out.println();
}
}
}
運行結果:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

Ⅵ 誰有螺旋矩陣的說明

關於螺旋矩陣的說法不一,這里指的是形如
21 22................
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
的矩陣。

問題有兩個:
1. 編程實現輸出這個矩陣
2. 設1點的坐標是(0,0),x方向向右為正,y方向向下為正.例如:7的坐標為(-1,-1) ,2的坐標為(0,1),3的坐標為(1,1).編程實現輸入任意一點坐標(x,y),輸出所對應的數字。

1. 第一個問題我是採用模擬進行構造的,可以看到從1開始的方向變化始終是 right->down->left->up,
所持續走的長度為1->1->2->2->3->3->...,發現了這個規律不難寫出代碼了!注意下面我把1的位置設置
在((n-1)/2, (n-1)/2)的位置。

void Simulate(int n)
{
int x, y;
x = y = (n - 1) / 2; //1的位置
data[x][y] = 1;
int len = 1;
int count = 0;
int num = 2;
DIRECTION dir = RIGHT;
while(num <= n * n)
{
for(int i = 0; i < len; i++)
{
switch(dir)
{
case LEFT:
--y; break;
case RIGHT:
++y; break;
case UP:
--x; break;
case DOWN:
++x; break;
default: break;
}
data[x][y] = num++;
}
count++;
if(count == 2)
{
count = 0;
len++;
}
dir = (DIRECTION)((dir + 1) % 4);
}
}

2. 第二個問題我也是先找出規律,然後進行模擬。
首先,不難看出n*n的螺旋矩陣的右下角的坐標一定是(m, m),這里m=n-1
通過觀察,可以看出 n=1的時候,右下角(0,0)的值為1,當n=2的時候,右下角(1,1)的坐標值為(3,3),當n=3的時候,右下角(2,2)的坐標值為13.直覺告訴我,這個值是關於n的二次函數,設f(n) = a*n^2 + b*n + c
聯立方程組,可以求得a,b,c。 最終算出來的f(n) = 4*n^2 - 2*n + 1
下面再根據(x,y)和右下角(n-1,n-1)之間的關系,計算出值即可。這里要注意當x的值與n-1相同時,應優先考慮y與-m是否有聯系。這就要求在函數中要注意x,y的判斷先後順序了。
代碼如下:

//以(1,1)所在位置作為原點,向右作為x正半軸,向下作為y正半軸
int GetValue(int x, int y)
{
int m = max(abs(x), abs(y));
int rightBottom = m * m * 4 - 2 * m + 1;
int value = 0;
if(x == -m)
{
value = rightBottom + 2 * m + m - y;
}
else if( y == m)
{
value = rightBottom + m - x;
}
else if(y == -m)
{
value = rightBottom + 4 * m + x + m;
}
else if( x == m )
{
value = rightBottom - (m - y);
}

return value;
}

Ⅶ 2011全國軟體設計大賽題真題,編程題:代碼怎麼寫

10
#include<stdio.h>
int main( )
{
int a,b,c,d,e,f,g,h,i,j;
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
for(d=0;d<=1;d++)
for(e=0;e<=1;e++)
for(f=0;f<=1;f++)
for(g=0;g<=1;g++)
for(h=0;h<=1;h++)
for(i=0;i<=1;i++)
for(j=0;j<=1;j++)
{
if(a==1&&b!=1) break;
if(c==0&&d!=0) break;
if(a==1&&c==1) break;
if((b==0&&d==0)||(b==1&&d==1)) break;
if(d+e+f+g+h<2) break;
if(c+g==1) break;
if(c+e+g+i>2) break;
if(e==1&&(f==0||g==0)) break;
if(f==1&&(g==1||h==1)) break;
if(i==1&&j==1&&h==0) break;

if(a) printf("A");
if(b&&a==1) printf(" B");
else if(b) printf("B");
if(c&&a+b!=0) printf(" C");
else if(c) printf("C");
if(d&&a+b+c!=0) printf(" D");
else if(d) printf("D");
if(e&&a+b+c+d!=0) printf(" E");
else if(e) printf("E");
if(f&&a+b+c+d) printf(" F");
else if(f) printf("F");
if(g&&a+b+c+d+e+f!=0) printf(" G");
else if(g) printf("G");
if(h&&a+b+c+d+e+f+g!=0) printf(" H");
else if(h) printf("H");
if(i&&a+b+c+d+e+f+g+h!=0) printf(" I");
else if(i) printf("I");
if(j&&a+b+c+d+e+f+g+h+i!=0) printf(" J");
else if(j) printf("J");
printf("\n");
}return 0;
}
8
#include<stdio.h>
#include<string.h>
int main( )
{
char as[200];
while(1)
{
gets(as);/*輸入字元串*/
if(strlen(as)==0) break;
int i,j,k;
for(i=0;as[i]!='\0';i++)
if(as[i]!=' ')
break;
else printf(" ");/*判斷最前面是否為空格*/
for(;as[i]!='\0';i++)
{
if(as[i]>='a'&&as[i]<='z')/*當遇到字母時*/
{ if(i-1<0||as[i-1]==' ')
printf("%c",as[i]-32);
else printf("%c",as[i]);
}
else
{
if(as[i]>='0'&&as[i]<='9')/*數字*/
{if((i-1<0||(as[i-1]<'0'||as[i-1]>'9'))&&as[i-1]!=' ')
printf("_%c",as[i]);
else
if((as[i+1]=='\0'||(as[i+1]<'0'||as[i+1]>'9'))&&as[i+1]!=' ')
printf("%c_",as[i]);
else printf("%c",as[i]);
}
else
if(as[i]==' ')/*空格*/
if(as[i-1]!=' ')
printf(" ");
}
}printf("\n");
}return 0;
}
9
#include<stdio.h>
int as[23][23],k;
void heng(int i1,int j1)
{
for(;;)
{
if(as[i1][j1]!=0) break;
as[i1][j1]=k;
j1++;k++;
}
return;
}
void xie(int i2,int j2)
{
for(;;)
{
if(as[i2][j2]!=0) break;
as[i2][j2]=k;
i2++;j2--;k++;
}
return;
}
void shu(int i3,int j3)
{
for(;;)
{
if(as[i3][j3]!=0) break;
as[i3][j3]=k;
i3--;
k++;
}
return;
}
int main( )
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j; k=1;
for(i=0;i<n+3;i++)
for(j=0;j<n+3-i;j++)
as[i][j]=-1;
for(i=1;i<n+2;i++)
for(j=1;j<n+2-i;j++)
as[i][j]=0;
for(i=1,j=0;;i++)
{
if(j>=n) break; else {heng(i,i);j++;}
if(j>=n) break; else {xie(i+1,n+1-2*i);j++;}
if(j>=n) break; else {shu(n+1-2*i,i);j++;}
}
for(i=1;i<=n;i++)
{
for(j=1;j<n+2-i;j++)
if(j==1) printf("%d",as[i][j]);
else printf(" %d",as[i][j]);
printf("\n");
}
}
return 0;
}

Ⅷ 誰用java寫過最短的螺旋矩陣分享一下,下面是我寫的!

寫得太復雜了,if else語句最好不要這樣用

Ⅸ java二維數組3*3螺旋矩陣實例,請解釋下循環的過程

publicclassT{

publicstaticvoidmain(String[]args){
inti,j;
int[][]a={{1,1,1},{2,2,2},{3,3,3}};
int[][]b=newint[3][3];
System.out.print("初始矩陣: ");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
System.out.print(a[i][j]+"");
}
System.out.print(" ");
}
System.out.print("轉置矩陣: ");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
b[i][j]=a[j][i];
System.out.print(b[i][j]+"");
}
System.out.print(" ");
}
}
}

Ⅹ 如何用JAVA實現螺旋矩陣

import java.io.*;public class RingDemo {
public static void main(String[] args) {
String strIn = "";
System.out.print("請輸入矩陣的行列數:");
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader buff = new BufferedReader(input);
try {
strIn = buff.readLine();
} catch (IOException e) {
System.out.println(e.toString());
}
int int1 = Integer.parseInt(strIn);
int n = int1;
System.out.println("這是行列數為" + n + "的螺線型數組:");
int intA = 1; // 初始化
int[][] array = new int[n][n];
int intB;
if (n % 2 != 0) {
intB = n / 2 + 1; // 奇數時i循環次數
} else
intB = n / 2; // 偶數時i循環次數
for (int i = 0; i < intB; i++) { // 從外到里循環
// 從左到右橫的開始
for (int j = i; j < n - i; j++) {
array[i][j] = intA;
intA++;
}
// 從上到下縱
for (int k = i + 1; k < n - i; k++) {
array[k][n - i - 1] = intA;
intA++;
}
// 從右到左橫
for (int l = n - i - 2; l >= i; l--) {
array[n - i - 1][l] = intA;
intA++;
}
// 從下到上縱
for (int m = n - i - 2; m > i; m--) {
array[m][i] = intA;
intA++;
}
}
// 輸出數組
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
} }
}

閱讀全文

與螺旋矩陣java相關的資料

熱點內容
win10原始解壓軟體 瀏覽:319
阿里程序員的老家 瀏覽:258
量子加密銀行 瀏覽:193
命令方塊獲得指令手機 瀏覽:499
學習結束感言簡短程序員 瀏覽:398
android關機鬧鍾實現 瀏覽:968
滑鼠一鍵打開文件夾設置 瀏覽:161
程序員看過來我想靜靜搞笑視頻 瀏覽:370
curlphp爬蟲 瀏覽:874
python按日期循環 瀏覽:110
php三個等號 瀏覽:760
培訓班出來的程序員解決問題很差 瀏覽:963
程序員那麼可愛25集 瀏覽:753
伺服器地址和ip地址一樣不 瀏覽:664
php中括弧定義數組 瀏覽:602
php列印堆棧 瀏覽:516
華為adb命令行刷機 瀏覽:965
人像攝影pdf 瀏覽:761
解壓文件密碼怎樣重新設置手機 瀏覽:1002
高考指南pdf 瀏覽:697