蓝桥杯12省赛真题_java.A组试题学习

C组试题重复的不做整理

(55条消息) 蓝桥杯12省赛真题_java.C组试题学习_Allstruct的博客-CSDN博客

 public int requireDirectLine(int x,int y) {
        Test5 test5 = new Test5();
        int arr[][] =new int[x][y];
        HashSet<String> set = new HashSet<>();
        for(int i = 0; i < arr.length; i++) {
            for(int j = 0; j < arr[0].length; j++) {
                //取双重for循环为一个点,即(i,j),另外的双重for循环为另外一个点,即(p,q)
                for(int p = 0; p < arr.length; p++ ) {
                    for(int  q = 0; q < arr[0].length; q++) {
                        if( i == p && j ==q ) {    	//这一步判断可以不要
                            continue;
                        }
                        if( i != p) {               //x1 == x2时直线斜率不存在,即当直线垂直于x轴时,直线斜率不存在。
                            String line = "";
                            int u = q - j;          //y2-y1
                            int d = p - i;          //x2-x1
                            int g = gcd(u,d);  //u、d的最大公约数
                            line = line + u/g+ "/"+ d/g + "+";  //(y2-y1)/(x2-x1)    k = u/g+ "/"+ d/g
                            int b = j * d - u *i;               
                            // y = kx +b -> b = y - kx  将点(i,j),k=(y2-y1)/x2-x1代入。
                            // 可得b= (y0(x2-x1)- x0(y2-y1))/x2-x1  
                            //即求除数与被除数的最大公约数就可以求出该直线的最简式,最简式一样即两条直线是同一条直线。
                            int g2 = gcd(b,d);             //求 y0(x2-x1) - x0(y2-y1))/x2-x1 的最大公约数
                            line = line + b/g2 + "/" + d/g2;      // 直线 为 kx + b ,k、b不一致,将直线加入set。
                            set.add(line);
                        }
                    }
                }
            }
        }
        if( y == 1) {             //当y为1时,即只有一行,这时无需加上垂直的直线,即垂直与x坐标轴的值。
            return set.size();
        }
        return set.size() + x;    //加上斜率不存在的直线。即横坐标的值。
    }

    //辗转相除法求最大公约数-->递归方式
    public int gcd(int x,int y){
        if( y == 0){
            return x;
        }
        return gcd(y,x%y);
    }

知识点:直线的表示,hashset去重,hashcode查表

(53条消息) 深入理解HashSet去重原理_留乘船的博客-CSDN博客_hashset

  ((53条消息) 必须掌握的hashcode()方法_Java笔记虾的博客-CSDN博客)

(53条消息) 2021年 第12届 蓝桥杯 Java B组 省赛真题第一场——货物摆放_码界猿候的博客-CSDN博客_蓝桥杯货物摆放

(54条消息) 第十二届蓝桥杯JavaB组省赛-回路计数_清梦2020的博客-CSDN博客

(56条消息) 第十二届蓝桥杯Java省赛A组试题:异或数列_叶绿体不忘呼吸的博客-CSDN博客(不太明白)

蓝桥杯 - 分果果 - XeRiVO - 博客园 (cnblogs.com)(看不懂)

(56条消息) 第十二届蓝桥杯大赛软件类省赛Java研究生组-题解_nuist__NJUPT的博客-CSDN博客_南京邮电大学第十二届蓝桥杯

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值