Java 已知直角三角形周长,求整数边

  • 1.三重循环
  • 2.二重循环
    • 2.1优化二重循环
  • 3.一重循环

直角三角形周长

题目链接:https://www.cupacm.com/newsubmitpage.php?id=1094
这是一道非常典型的枚举题目,以下会一步一步分析如何对枚举进行优化。

题目描述
一个直角三角形的周长是120的话,那么它的三边可以是20,48,52,或者24,45,51,还有30,40,50,有3种不同的解。现在你想知道如果给定一个直角三角形的周长,那么这个周长最多能有多少解呢?假设边长为整数。

输入
第一行一个T TT,表示T TT组测试数据。1≤T≤10000 1\leq T\leq 100001≤T≤10000
每组测试数据占一行仅含一个整数A AA。0≤A≤100000 0\leq A\leq 1000000≤A≤100000

输出
根据每组测试数据请求出以整数A为周长的直角三角形的个数。(边长都为整数的直角三角形且周长为整数A)
输入.

 20012120

输出.

 113

题解
这是一道非常典型的枚举题目,以下会一步一步分析如何对枚举进行优化,希望能对其他枚举问题有所启发。

1.三重循环

看到这道题,首先会想到枚举三条边,如果能符合三条边加在一起等于周长,符合勾股定理,则满足条件并计数
出现问题:最普通的枚举时间超限
代码.

 public static int cum1(int l) {int count=0;for (int i = 1; i < l; i++) { for (int j = 1; j < l; j++) { for (int k = 1; k < l; k++) { if (i + j + k == l && i * i + j * j == k * k) {count++;}}} }return count/2;    }

2.二重循环

现在,做一点优化,指定i≤j 这样可以避免i 与j重复枚举(例如345,435是同一个答案)来节约时间,k作为斜边,直接通过i j和周长便可以计算出k,减少一重循环。

代码.

 public static int cum2(int l) {int count=0;for (int i = 1; i < l; i++) { for (int j =i; j < l; j++) {  int k = l - i - j; if ( i * i + j * j == k * k) {count++;}                }   }return count;  }

还会超时,做一个优化

2.1优化二重循环

已知:
i+j+k=l;
0<i<j<k;
解得:i<l/3; j<l/2; k<i+j

代码.

 public static int cum3(int l) {int count=0;for (int i = 1; i < l / 3; i++)  {    for (int j = i; j < l / 2; j++) { int k = l - i - j; if (k < i + j && i * i + j * j == k * k) {count++;}                }   }return count;  }

3.一重循环

已知 i+j+k=l;
i^2 +j^2 = k^2;
解出:
j=l−l^2 /(2l−2i) 。

以下为最优代码

代码.

 public static int cum(int l) {int count=0;for (int i = 1; i < l/3; i++) {            double j=l-(double)l*l/(2*l-2*i);if(i<j&&j-(int )j<1e-5) {count ++;}}      return count;}

参考: [CUPOJ] 直角三角形周长 枚举优化 题解,C++版本

Java 已知直角三角形周长,求整数边相关推荐

  1. Java算法题目小记3:勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形.已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数。 求满足这个条件的不同直角三角形的个数。

    题目 勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] ...

  2. 已知直角三角形的斜边是某个整数,求满足这个条件的不同直角三角形的个数。

    勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] 输入一 ...

  3. JAVA已知圆心经纬度和半径求圆周点的经纬度

    JAVA已知圆心经纬度和半径求圆周点的经纬度 项目中遇到一个需求,需要根据传入的圆心经纬度和半径参数获得圆周点的经纬度,在网上查询了很多没有找到能用的算法,从GPT中获取到了一个简洁的用java实现的 ...

  4. 【三角函数】已知直角三角形的斜边长度和一个锐角角度,求另外两条直角边的长度...

    如图,已知直角三角形ABC中,∠C=90°, ∠A=a ,AB=c ,求直角边AC.BC的长度. ∵ ∠C=90°,∠A=a ,AB=c ,Cos∠A=AC/AB ,Sin∠A=BC/AB ,∴ AC ...

  5. 高斯投影坐标计算例题_测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎么算-数学-莫囤料同学...

    概述:本道作业题是莫囤料同学的课后练习,分享的知识点是y坐标的自然值怎么算,指导老师为甘老师,涉及到的知识点涵盖:测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎 ...

  6. c++已知2点求中垂线_呆哥数学函数合集——函数的概念【2】

    高中数学函数基本概念,学好函数还是要先懂概念再做题. 下面是呆哥给你们整理好的基本知识要点. 不懂的可以找我私聊,在线帮你解答. 多看我专栏发的每日一题和解析,会对你们有用的 . 加油哈!离高考还有一 ...

  7. 已知经纬度坐标求两点间距离,用python表示

    已知经纬度坐标求两点间距离,用python表示 已知地球上任意两点(lon1, lat1),( lon2, lat2)的经纬度坐标,求两点间的距离用haversine表示: 1.首先先将经纬度坐标的角 ...

  8. python坐标表示_已知经纬度坐标求两点间距离,用python表示

    已知经纬度坐标求两点间距离,用python表示 已知地球上任意两点(lon1, lat1),( lon2, lat2)的经纬度坐标,求两点间的距离用haversine表示: 1.首先先将经纬度坐标的角 ...

  9. matlab已知三点求夹角,已知3点如何求其中两点对第3点的夹角

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:已知3点如何求其中两点对第3点的夹角? 问题详情:有3个问题:1)已知3点如何求其中两点对第3点的夹角?2)如何回答:1)已知3点求 ...

  10. 已知网络号求子网掩码c语言,已知ip地址求子网掩码 - 已知ip地址求子网掩码_已知ip地址和子网掩码求网络号、子网号和主机号...

    已知ip地址求子网掩码的方法: 方法一:利用子网数来计算: 1.首先,将子网数目从十进制数转化为二进制数: 2.接着,统计得到的二进制数的位数,设为N: 3.最后,先求出此IP地址对应的地址类别的子网 ...

最新文章

  1. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
  2. CentOS7重新生成 /boot/grub2/grub.cfg
  3. java slf4j日志框架_SLF4J - 日志框架 - 类库 - Java - 代码树
  4. 设备树之GPIO和中断实例
  5. 成功解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 0: invalid continuation byt
  6. Redis Master/Slave 实践
  7. ibatisnet 学习手记(1)
  8. Planar Homography (共面点成像) Epipolar Geometry(对极几何)
  9. OpenGL:显示一些立体图形示例程序(真不错)
  10. 欺骗神经网络_可以欺骗神经网络吗?
  11. HTML5 实现拼图游戏
  12. 小波去噪 语音去噪 信号小波去噪 小波基去噪 小波收缩去噪-matlab
  13. ESXi5安装vib格式驱动
  14. Nginx nginx.conf配置文件详解
  15. Kali [CobaltStrike]CS神器
  16. php 汉王云名片_利用PHP自动生成印有用户信息的名片
  17. 互联网创业公司失败的7大特征
  18. easyexcel 列头合并_2020-05-19:EasyExcel自定义合并单元格
  19. opencv各个lib库的作用
  20. word设置图标索引

热门文章

  1. 【黑金原创教程】【Modelsim】【第五章】仿真就是人生
  2. USB 3.0 知道
  3. linux 显卡优化软件,NVClock:优化 Nvidia 显卡
  4. 论文caj转换为word
  5. openwrt 怎么进入串口_OpenWrt路由器读取串口数据,建立tcp服务
  6. 程序员必读:摸清hash表的脾性
  7. 戴尔服务器装完系统没启动项,华硕电脑重装系统后没有硬盘启动项是什么原因?...
  8. 奇迹服务器数据修改,奇迹Mu商业服务端 客户端装备外观修改说明!
  9. java之简易生成彩色二维码实践
  10. 3dfier:GIS数据转3D城市模型