我想构造一个大小为n的方阵(2D)(将由用户输入) 现在我想构建一个对角线模式。 例如(3X3矩阵):
2 3
1
4 5
value
变量将初始化为1并存储在方阵的中心。然后value
将递增并存储在左上角,如上所示,依此类推。
这是一个在控制台上显示的简单程序。 用户输入可以从命令行获取。 我试图在for循环中推广一个条件,该条件适用于大小为5,7,9 ...(奇数)的方阵。 对于大小为5的矩阵,它将是
6 7
2 3
1
4 5
8 9
(空格可以为零)
我的代码:
import java.util.*;
public class MatrixAdv
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
System.out.println("Please enter size of element...");
int n=sc.nextInt(); //stores size of Matrix
int value=0; //To be incremented everytime to get the Pattern
int [][] matrix = new int[n][n];
int k=0;
for(int i=0;i<some Condition;i++)
{
for(int j=1;j<some Condition;j++)
{
k=n-2-j;
matrix[k][k]=++value;
}
}
}
//Display the value in matrix form
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
Print(matrix[i][j]+"\t");
}
Print("\n");
}
}
答案 0 :(得分:2)
如果您知道矩阵的魔力,它很容易打印出99%的矩阵模式......而且您可以在不使用任何内存的情况下完成它。
这是代码......
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n == 1)
cout<<1;
else
{
int sv=2*n-4,a,b;
a=sv;b=sv+1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i == j && i+j == n+1)
{
cout<<" 1 ";
sv=4;
}
else
{
if(i == j)
cout<<" "<<a<<" ";
else if((i+j) == n+1)
cout<<" "<<b<<" ";
else
cout<<" ";
}
}
if(i < n/2+1)
{
sv=sv-4;
a=sv;b=sv+1;
}
else if(i > n/2+1)
{
sv=sv+4;
b=sv;a=sv+1;
}
else
{
sv=4;
b=sv;a=sv+1;
}
cout<<"\n";
}
}
}
答案 1 :(得分:1)
解决这个问题基本上有两种选择:
它们都与for
- 循环的条件无关。但是,这是第二种方法的一个例子:
public class MatrixAdv
{
public static void main(String args[])
{
//Scanner sc = new Scanner(System.in);
//System.out.println("Please enter size of element...");
//int n = sc.nextInt(); // stores size of Matrix
int n = 9;
int value = 0;// To be incremented everytime to get the Pattern
int[][] matrix = new int[n][n];
matrix[n/2][n/2] = 1;
int maxValue = ((n / 2) * 4) + 1;
int r = n / 2 - 1;
int c = n / 2 - 1;
int d = 2;
for (value=2; value<=maxValue; value++)
{
matrix[r][c] = value;
int step = ((value-2)%4);
switch (step)
{
case 0: c+=d; break;
case 1: r+=d; c-=d; break;
case 2: c+=d; break;
case 3: d+=2; r-=d-1; c-=d-1; break;
}
}
// Display the value in matrix form
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (matrix[i][j] == 0)
{
System.out.printf("%3s", "_");
}
else
{
System.out.printf("%3d", matrix[i][j]);
}
}
System.out.print("\n");
}
}
}