关于棋盘求周长面积问题

该博客介绍了一个基于棋盘的坐标计算问题,通过横平竖直放置于x-y坐标轴上的棋子,确定其边界并计算面积和周长。代码中使用了线程安全的计算方法,检查坐标是否在棋盘范围内,并通过迭代找到棋盘的实际尺寸。算法适用于不同棋盘放置情况,复杂度随棋盘位置变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题是坐标问题,根据坐标求取长宽算出面积、周长
1、new Boolean()[1][2],其中Boolean并非是java Boolean类,是一种伪代码方法表示
2、棋盘放置位置不同会有不同算法,复杂度也不一样,解决方法采用横平竖直放于x-y坐标轴上
在这里插入图片描述
3、代码

/**
 * @author szx
 * @2020/9/29 9:48
 */
public class Chessboard {
    public static void main(String[] args) {
        //随便取一个棋盘内的棋子
        calculateArea(100,0);
    }
    //使用锁,中间有++i保证线程安全
    private static Object o1 = new Object();
    //计算面积
    public static void calculateArea(int x,int y){
        //1必须给定一个初始坐标且确认坐标在棋盘
        if(!checkHaveBeen(x,y)){
            System.out.println("请确定参数");
            return;
        }

        synchronized (o1){
            int ileft  = x;
            int iright  = x;
            int jdown = y ;
            int jtop = y ;
            int finalIntXLeft;
            int finalIntXRight;
            int finalIntYTop;
            int finalIntYDown;
            while(true){
                Boolean aBoolean = checkHaveBeen(--ileft, y);
                if(!aBoolean){
                    finalIntXLeft = ++ileft;
                    break;
                }
                if(ileft<-1000000){
                    System.out.println("计算失败");
                    return;
                }
            }

            while(true){
                Boolean aBoolean = checkHaveBeen(++iright, y);
                if(!aBoolean){
                    finalIntXRight = --iright;
                    break;
                }
                if(iright>1000000){
                    System.out.println("计算失败");
                    return;
                }
            }


            while(true){
                Boolean aBoolean = checkHaveBeen(x, --jdown);
                if(!aBoolean){
                    finalIntYDown = ++jdown;
                    break;
                }
                if(jdown<-1000000){
                    System.out.println("计算失败");
                    return;
                }
            }

            while(true){
                Boolean aBoolean = checkHaveBeen(x, ++jtop);
                if(!aBoolean){
                    finalIntYTop = --jtop;
                    break;
                }
                if(jtop>1000000){
                    System.out.println("计算失败");
                    return;
                }
            }
           int  divisionX = finalIntXRight-finalIntXLeft;
           int divisionY =  finalIntYTop-finalIntYDown;

            int calArea = divisionX*divisionY;
            int calAllLong =(divisionX+divisionY)*2;
            System.out.println("棋盘面积"+calArea);
            System.out.println("棋盘周长"+calAllLong);
        }
    }

    //这个方法相当于题目new Boolean[i][j]
    public static Boolean checkHaveBeen(int i,int j){
        //我将棋盘左下角放于坐标原点上,不这么放置也行,只要能正常返回棋子是否在棋盘内
        if(i>100 || j>100 || i<0 || j<0){
            return  Boolean.FALSE;
        }
        return Boolean.TRUE;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值