二维数组习题整理(二)

 注:要找出整行整列或对角线是0和1,我们可以对其和进行判断,为0时,则和为;为1时,则说明其和为m.length

import java.util.*;
/*
1.提示用户输入尺寸  创建方阵
2.随机给方阵填入0和1
3.让行,列,对角线累加 sum==0 sum==size 表示全相等
 */
class test12{
    public static void main(String[] args){
        //1.提示用户输入尺寸  创建方阵
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入尺寸");
        int size=scanner.nextInt();
        int[][] m=new int[size][size];
        //2.随机给方阵填入0和1
        Random random=new Random();
        for(int i=0;i<size;i++){//遍历方阵
            for(int j=0;j<size;j++){
                m[i][j]=random.nextInt(2);
                System.out.print(m[i][j]+" ");
            }
            System.out.println();
        }
        //3.让行,列,对角线累加 sum==0 sum==size 表示全相等
        checkRow(m);//行
        checkCol(m);//列
        checkDiagonal(m);//主对角
        checkSubDiagonal(m);//副对角
    }
    public static void checkRow(int[][] m){
        for(int i=0;i<m.length;i++){
            int sum=0;
            for(int j=0;j<m[0].length;j++){
                sum+=m[i][j];
            }
            if(sum==0||sum==m.length){
                System.out.printf("第%d行全相等且是%d\n",i+1,sum==0?0:1);
            }
        }
    }
     public static void checkCol(int[][] m){
        for(int j=0;j<m[0].length;j++){
            int sum=0;
            for(int i=0;i<m.length;i++){
                sum+=m[i][j];
            }
            if(sum==0||sum==m.length){
                System.out.printf("第%d列全相等且是%d\n",j+1,sum==0?0:1);
            }
        }
    }
    public static void checkDiagonal(int[][] m){
        int sum=0;
        for(int i=0;i<m.length;i++){
            sum+=m[i][i];
           }
            if(sum==0||sum==m.length){
                System.out.printf("主对角相等且是%d\n",sum==0?0:1);
            }
      }
      public static void checkSubDiagonal(int[][] m){
        int sum=0;
        for(int i=0;i<m.length;i++){
            sum+=m[i][m.length-1-i];
           }
            if(sum==0||sum==m.length){
                System.out.printf("副主对角相等且是%d\n",sum==0?0:1);
            }
      }
}

 

 注:如下图分析 如果要出现连续相等的情况,就必须满足以下四个条件中的一个

import java.util.*;
class test13{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入行和列");
        int row=scanner.nextInt();
        int col=scanner.nextInt();
        int[][] m=new int[row][col];
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                m[i][j]=scanner.nextInt();
            }
        }
        System.out.println(isConsecutiveFour(m));
    }
    public static boolean isConsecutiveFour(int[][] m){
        for(int i=0;i<m.length;i++){
            for(int j=0;j<m[i].length;j++){
                //向右
                if(j<=m[i].length-4){
                    boolean flag=true;
                    for(int c=j+1;c<=j+3;c++){
                        if(m[i][j]!=m[i][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //向下
                if(i<=m.length-4){
                    boolean flag=true;
                    for(int r=i+1;r<=i+3;r++){
                        if(m[i][j]!=m[r][j]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //向右下
                if(i<=m.length-4&&j<=m[0].length){
                    boolean flag=true;
                    for(int r=i+1,c=j+1;r<=i+3;r++,c++){
                        if(m[i][j]!=m[r][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //向右上
                if(i>=3&&j<=m[0].length-4){
                    boolean flag=true;
                    for(int r=i-1,c=j+1;c<=j+3;r--,c++){
                        if(m[i][j]!=m[r][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
            }
        }
         return false;//四个方向都没有连续的
    }
    
}
发布了21 篇原创文章 · 获赞 0 · 访问量 352

猜你喜欢

转载自blog.csdn.net/weixin_44318477/article/details/104409737