矩阵输出

编程实现矩阵,输入参数打印出相应维数的矩阵,如输入4,打印的矩阵为:
0 0 0 0
0 1 1 1
0 1 2 2
0 1 2 3
解题思路:刚拿到这个题的时候脑袋全是乱麻,想想但是怎么就没有好好学习线性代数,当时要是学好了线性代数,那么这个矩阵的规律就能明白,编程也会很轻松。幸好没有慌乱,如果把这道题拿给一个没有学过线性代数或者矩阵相关的知识,我想他也能做出来,接下来我们一步一步来看看这个题目如何解答。
1,先从输入开始,在java中如果用到输入的话我们会想到Scanner类,实例化代码为:Scanner sc = new Scanner(System.in);
之后,把输入的参数赋值给int变量n,代码为:int n = sc.nextInt();
2,接下来我们应该想办法把我们生成的数字存储下来,看到例子的第一眼,我们应该第一个想到二位数组,是的我们可以使用二维数组来存储这些数字,数组实例化代码:int[][] arr = new int[n][n];
3,怎么得到这些值,当然是循环里面。所以我们会用二个for循环:代码如下:
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
//做一些事情
}
}
0 0 0 0
0 1 1 1
0 1 2 2
0 1 2 3
4,好了,让我们来关注所给例子本身把,现在不要想和矩阵有关的任何知识。
看到例子的第一眼,你发现了什么规律?所给例子的对角线和第一层循环的下标相等。所以我们有下面这行代码:
arr[i][i] = i;这样循环之后就会有a[0][0]=0;a[1][1]=1;a[2][2]=2;a[3][3]=3;
再看看还有什么规律?发现了,第一行第一列都是0,把0去掉之后,第一行第一列都是1,依次类推。
所以 arr[i][j]=i;arr[j][i]=i;
好了,一切ok。我们回写下下面的代码:
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
arr[i][i] = i;
arr[i][j] = i;
arr[j][i] = i;
}
}
运行一下ok。与例子完全一样。可不可改进一下。答案是可以的。例如arr[i][i]=i;不用每次循环都设置,所以为了不重复设值,也为了速度更快,我们最好把这行代码放到第一个for循环下。还有就是,第二层for循环我们可以设置j=i+1;这样也可以减少重复设值。
所以最终的for循环如下:
for (int i=0; i<n; i++) {
arr[i][i] = i;
for (int j=i+1; j<n; j++) {
arr[i][j] = i;
arr[j][i] = i;
}
}
最终代码,如下:
import java.util.Scanner;
public class JZ {
/*
*欢迎访问:www.exceptionhelp.com
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n < 1) {
System.out.println("数太小!");
}
int[][] arr = jz(n);
for (int i=0; i<arr.length; i++) {
for (int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
public static int[][] jz(int n) {
int[][] arr = new int[n][n];
for (int i=0; i<n; i++) {
arr[i][i] = i;
for (int j=i+1; j<n; j++) {
arr[i][j] = i;
arr[j][i] = i;
}
}
return arr;
}
}
输入:5
运行结果:
0 0 0 0 0
0 1 1 1 1
0 1 2 2 2
0 1 2 3 3
0 1 2 3 4
更多信息请访问[url]http://www.exceptionhelp.com[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值