PAT 1068 乙级 java

6 篇文章 0 订阅

两个错误答案,一个超时点,输入格式还有特殊情况估计没有考虑到所以。QWQ,难受,等二刷的时候再解决这个问题,思路都在代码里面

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 *输入模式 col row tol(颜色差阈值)
 * 题中行列的下标都是从1开始
 * 在判断的时候使用从0开始的下标,输出唯一坐标后row+1,col+1
 * */
public class p1068 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] inputInfo=br.readLine().split("[ ]");
        int col=Integer.parseInt(inputInfo[0]);
        int row=Integer.parseInt(inputInfo[1]);
        int tol=Integer.parseInt(inputInfo[2]);
        int[][] nums=new int[row][col];
        for (int i = 0; i <row ; i++) {//开始构建矩阵
            String [] rowNums=br.readLine().split("\\s+|\\t");
            //构建矩阵中对应的行元素
            for (int j = 0; j <rowNums.length ; j++) {
                nums[i][j]=Integer.parseInt(rowNums[j]);
            }
        }


        //初始化完成矩阵,开始判断
        /**
         * 当前元素 nums[i][j]
         * 判断 nums[i-1][j-1] nums[i-1][j+1] nums[i+1][j-1] nums[i+1][j+1]是否存在,存在开始考虑
         * 判断ij周围元素与它的差值,如果全部在阈值范围之外则被判为特殊点,此时count++,当count>1
         * 输入not unique
         *
         * 时间复杂度为o(n^2)
         * */
       if(row<=2||col<=2) {//排除特殊矩阵
           System.out.println("Not Exist");
           return;
       }
       int count=0;
       int resRow=0;
       int resCol=0;
       int result=0;
        for (int i = 1; i <row-1 ; i++) {
            for (int j = 1; j <col-1 ; j++) {
                //开始判断元素与周围元素的大小
                /**
                 * 对应8 个元素为
                 * nums[i-1][j-1] nums[i-1][j] nums[i-1][j+1]
                 * nums[i][j-1] nums[i][j+1]
                 * nums[i+1][j-1] nums[i+1][j] nums[i+1][j+1]
                 * */
                int r1=-(nums[i-1][j-1]-nums[i][j]);
                int r2=-(nums[i-1][j]-nums[i][j]);
                int r3=-(nums[i-1][j+1]-nums[i][j]);
                int r4=-(nums[i][j-1]-nums[i][j]);
                int r5=-(nums[i][j+1]-nums[i][j]);
                int r6=-(nums[i+1][j-1]-nums[i][j]);
                int r7=-(nums[i+1][j]-nums[i][j]);
                int r8=-(nums[i+1][j+1]-nums[i][j]);
                if(r1<tol||r2<tol||r3<tol||r4<tol||r5<tol||r6<tol||r7<tol||r8<tol){
                    continue;
                }else{
                    count++;
                    if(count>1){
                        break;
                    }else{
                        resRow=i+1;
                        resCol=j+1;
                        result=nums[i][j];
                    }
                }
            }
        }
        if(count>1){
            System.out.println("Not Unique");
        }else if(count==1){
            System.out.printf("(%d, %d): %d", resCol, resRow, result);
        }else{
            System.out.println("Not Exist");
        }
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值