Java 已知直角三角形周长,求整数边
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 已知直角三角形周长,求整数边相关推荐
- Java算法题目小记3:勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形.已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数。 求满足这个条件的不同直角三角形的个数。
题目 勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] ...
- 已知直角三角形的斜边是某个整数,求满足这个条件的不同直角三角形的个数。
勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] 输入一 ...
- JAVA已知圆心经纬度和半径求圆周点的经纬度
JAVA已知圆心经纬度和半径求圆周点的经纬度 项目中遇到一个需求,需要根据传入的圆心经纬度和半径参数获得圆周点的经纬度,在网上查询了很多没有找到能用的算法,从GPT中获取到了一个简洁的用java实现的 ...
- 【三角函数】已知直角三角形的斜边长度和一个锐角角度,求另外两条直角边的长度...
如图,已知直角三角形ABC中,∠C=90°, ∠A=a ,AB=c ,求直角边AC.BC的长度. ∵ ∠C=90°,∠A=a ,AB=c ,Cos∠A=AC/AB ,Sin∠A=BC/AB ,∴ AC ...
- 高斯投影坐标计算例题_测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎么算-数学-莫囤料同学...
概述:本道作业题是莫囤料同学的课后练习,分享的知识点是y坐标的自然值怎么算,指导老师为甘老师,涉及到的知识点涵盖:测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎 ...
- c++已知2点求中垂线_呆哥数学函数合集——函数的概念【2】
高中数学函数基本概念,学好函数还是要先懂概念再做题. 下面是呆哥给你们整理好的基本知识要点. 不懂的可以找我私聊,在线帮你解答. 多看我专栏发的每日一题和解析,会对你们有用的 . 加油哈!离高考还有一 ...
- 已知经纬度坐标求两点间距离,用python表示
已知经纬度坐标求两点间距离,用python表示 已知地球上任意两点(lon1, lat1),( lon2, lat2)的经纬度坐标,求两点间的距离用haversine表示: 1.首先先将经纬度坐标的角 ...
- python坐标表示_已知经纬度坐标求两点间距离,用python表示
已知经纬度坐标求两点间距离,用python表示 已知地球上任意两点(lon1, lat1),( lon2, lat2)的经纬度坐标,求两点间的距离用haversine表示: 1.首先先将经纬度坐标的角 ...
- matlab已知三点求夹角,已知3点如何求其中两点对第3点的夹角
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:已知3点如何求其中两点对第3点的夹角? 问题详情:有3个问题:1)已知3点如何求其中两点对第3点的夹角?2)如何回答:1)已知3点求 ...
- 已知网络号求子网掩码c语言,已知ip地址求子网掩码 - 已知ip地址求子网掩码_已知ip地址和子网掩码求网络号、子网号和主机号...
已知ip地址求子网掩码的方法: 方法一:利用子网数来计算: 1.首先,将子网数目从十进制数转化为二进制数: 2.接着,统计得到的二进制数的位数,设为N: 3.最后,先求出此IP地址对应的地址类别的子网 ...
最新文章
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
- CentOS7重新生成 /boot/grub2/grub.cfg
- java slf4j日志框架_SLF4J - 日志框架 - 类库 - Java - 代码树
- 设备树之GPIO和中断实例
- 成功解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 0: invalid continuation byt
- Redis Master/Slave 实践
- ibatisnet 学习手记(1)
- Planar Homography (共面点成像) Epipolar Geometry(对极几何)
- OpenGL:显示一些立体图形示例程序(真不错)
- 欺骗神经网络_可以欺骗神经网络吗?
- HTML5 实现拼图游戏
- 小波去噪 语音去噪 信号小波去噪 小波基去噪 小波收缩去噪-matlab
- ESXi5安装vib格式驱动
- Nginx nginx.conf配置文件详解
- Kali [CobaltStrike]CS神器
- php 汉王云名片_利用PHP自动生成印有用户信息的名片
- 互联网创业公司失败的7大特征
- easyexcel 列头合并_2020-05-19:EasyExcel自定义合并单元格
- opencv各个lib库的作用
- word设置图标索引
热门文章
- 【黑金原创教程】【Modelsim】【第五章】仿真就是人生
- USB 3.0 知道
- linux 显卡优化软件,NVClock:优化 Nvidia 显卡
- 论文caj转换为word
- openwrt 怎么进入串口_OpenWrt路由器读取串口数据,建立tcp服务
- 程序员必读:摸清hash表的脾性
- 戴尔服务器装完系统没启动项,华硕电脑重装系统后没有硬盘启动项是什么原因?...
- 奇迹服务器数据修改,奇迹Mu商业服务端 客户端装备外观修改说明!
- java之简易生成彩色二维码实践
- 3dfier:GIS数据转3D城市模型