2018年蓝桥杯比赛java_[蓝桥杯][2018年第九届真题]整理玩具-题解(Java代码)

解题思路:

用矩阵存放输入的数据;

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

从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");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值