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;
}
}
}
}
}
}