二维数组题

1. 编写程序:提示输入一个方阵的行数,然后随机的在方阵中填入0或1,打印这个矩阵,然后找出整行或整列或对角线都是0或1的行、列和对角线。(课堂作业)(Java)

样列:

输入:矩阵的长度:4

输出:

0111

0000

0100

1111

第2行全为0

第四行全为1

主对角线没有相同数字

付对角线没有相同数字

package assignment;

import java.util.Random;
import java.util.Scanner;

public class demo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("请输入方阵的行数:");
		Scanner input=new Scanner(System.in);
		int row=input.nextInt();
		Random random=new Random();
		int[][] a=new int[row+1][row+1];
		//填充方阵
		for(int i=1;i<=row;i++) {
			for(int j=1;j<=row;j++) {
				a[i][j]=random.nextInt(2);
				System.out.print(a[i][j]);
			}
			System.out.println();
		}
		int sum1=0,sum2=0,sum3=0,sum4=0;
		//判断行列是否有相同数字
		for(int i=1;i<=row;i++) {
			sum1=0;sum2=0;
			for(int j=1;j<=row;j++) {
				sum1+=a[i][j];;
				sum2+=a[j][i];
			}
			if(sum1==0) {
				System.out.println("第"+i+"行全为0");
			}else if(sum1==4) {
				System.out.println("第"+i+"行全为1");
			}
			if(sum2==0) {
				System.out.println("第"+i+"列全为0");
			}else if(sum2==4) {
				System.out.println("第"+i+"列全为1");
			}
		}
		//判断主对角线
		for(int i=1;i<=row;i++){
			sum3+=a[i][i];
		}
		if(sum3==0) {
			System.out.println("主对角线全为0");
		}else if(sum3==4){
			System.out.println("主对角线全为1");
		}else {
			System.out.println("主对角线没有相同数字");
		}
		//判断副对角线
		for(int i=1;i<=row;i++) {
			sum4+=a[i][row+1-i];
		}
		if(sum4==0) {
			System.out.println("副对角线全为0");
		}else if(sum4==4) {
			System.out.println("副对角线全为1");
		}else {
			System.out.println("副对角线没有相同数字");
		}
		input.close();
	}

}

2.

1、(最大块)给定一个元素为0或者1的方阵编写程序找到一个元素都为1的最大方阵。然后显示最大方阵的第一个元素的位置及该方阵的行数。(Java)

样例:

输入:矩阵长度:5

(逐行输入矩阵:)

10101

11101

10111

10111

10111

输出:

最大方阵位置:(2,2),矩阵长度:3

程序需要实现和使用下面的方法找到最大子方阵:

Public static int[] findLargestBlock(int[][] m);

返回值是一个包含三个值的数组。前两个值是最大子方阵的左上角元素的位置下标,第三个值是子方阵的行数

package assignment;

import java.util.Scanner;

public class demo4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int row;
		Scanner input=new Scanner(System.in);
		System.out.println("请输入矩阵长度:");
		row=input.nextInt();
		int[][] matrix=new int[row][row];
		for(int i=0;i<row;i++) {
			for(int j=0;j<row;j++) {
				matrix[i][j]=input.nextInt();
			}
		}
		findLargestBlock(matrix);
		input.close();
	}
	public static void findLargestBlock(int matrix[][]) {
		for (int z= matrix.length; z>0; z--) {
			for (int i=0; i<= matrix.length-z; i++) {
				for (int j=0; j <=matrix.length-z; j++) {
					int sum=0;
					for (int i2=i; i2 - i < z; i2++) {
						for (int j2=j;j2-j<z;j2++) {
							sum+=matrix[i2][j2];
						}
					}
					if (z*z==sum) {
						System.out.println(
								"最大方阵位置(" + i + "," + j + ")," +"矩阵长度:"+ z);
						return;
					}
				}
			}
		}
	}

}

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值