解题思路:
用矩阵存放输入的数据;
输入的时候记录每个数出现的次数
从0开始到9结束
找这个数字在矩阵中出现的最边缘位置(即找该数字出现在矩阵的最靠右下角和左上角的位置的坐标)
用这个坐标计算出所谓矩形的面积 面积内所包含的元素数与之前记录的元素数是否相同,不相同直接输出NO
注意事项:
参考代码:import java.util.*;
public class 整理玩具 {
static boolean isOk(int ma[][],int n,int m,int times[]) {//判断符不符合规定
for(int i = 0; i
if(times[i] <=1)continue;//如果只出现一次或者0次 直接跳过就好
int maxrow = 0;//出现位置行最大值
int minrow = 100;//行最小值
int maxcol = 0;//出现位置的列最大值
int mincol = 100;//列最小值
//遍历矩阵 找对角线两点的坐标
for(int row = 0;row
for(int col = 0; col
if(ma[row][col] !=i)continue;
//更新
if(row>maxrow)maxrow = row;
if(row
if(col>maxcol)maxcol = col;
if(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
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
String s = sc.nextLine();//一下子读一行
for(int col = 0;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");
}
}
}