解题思路:

用矩阵存放输入的数据;

输入的时候记录每个数出现的次数

从0开始到9结束

找这个数字在矩阵中出现的最边缘位置(即找该数字出现在矩阵的最靠右下角和左上角的位置的坐标)

用这个坐标计算出所谓矩形的面积   面积内所包含的元素数与之前记录的元素数是否相同,不相同直接输出NO





注意事项:

参考代码:

import java.util.*;
public class 整理玩具 {
    static boolean isOk(int ma[][],int n,int m,int times[]) {//判断符不符合规定
        for(int i = 0; i < 10;++i) {
            if(times[i] <=1)continue;//如果只出现一次或者0次  直接跳过就好
            int maxrow = 0;//出现位置行最大值
            int minrow = 100;//行最小值
            int maxcol = 0;//出现位置的列最大值
            int mincol = 100;//列最小值
            //遍历矩阵  找对角线两点的坐标
            for(int row = 0;row < n;++row) {
                for(int col = 0; col < m;++col) {
                    if(ma[row][col] !=i)continue;
                    //更新
                    if(row>maxrow)maxrow = row;
                    if(row<minrow)minrow = row;
                    if(col>maxcol)maxcol = col;
                    if(col<mincol)mincol = col;
                }
            }
            //如果记录的次数与矩形面积不符直接返回false
            if(times[i]!=(maxcol-mincol+1)*(maxrow-minrow+1))return false;
        }
        return true;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();//需要判断的个数
        for(int i = 0; i < num;++i) {
            int n = sc.nextInt();//N
            int m = sc.nextInt();//M
            sc.nextLine();//吞掉回车
            int times[] = new int[10];//记录每个数字出现的次数
            int ma[][] = new int [n][m];
            for(int row = 0; row < n;++row) {
                String s = sc.nextLine();//一下子读一行
                for(int col = 0;col<m;++col) {
                    String temp = s.substring(col, col+1);//取出一个值
                    int tempInt = Integer.parseInt(temp);//转成int
                    times[tempInt]++;//该数出现的次数+1
                    ma[row][col] = tempInt;//赋给矩阵
                }
            }
            if(isOk(ma,n,m,times) == true)System.out.println("YES");
            else System.out.println("NO");
        }
    }
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论