Java练习--三角形计算

本文介绍了一种高效算法,用于计算由非负整数组成的数组中能构成三角形的三元组数量。该算法首先对数组进行排序,接着采用双指针技术从前向后遍历数组,通过判断两短边之和是否大于最长边来确定能否构成三角形,复杂度为O(n²)。

Given an array consists of non-negative integers, your task is to count the number of triplets chosen from the array that can make triangles if we take them as side lengths of a triangle.

Example 1:

Input: [2,2,3,4]
Output: 3
Explanation:
Valid combinations are: 
2,3,4 (using the first 2)
2,3,4 (using the second 2)
2,2,3

Note:

  1. The length of the given array won't exceed 1000.
  2. The integers in the given array are in the range of [0, 1000]

public class Solution {
    public int triangleNumber(int[] nums) {
        
    }
}


解决代码:

public static int triangleNumber(int[] A) {
    Arrays.sort(A);
    int count = 0, n = A.length;
    for (int i=n-1;i>=2;i--) {
        int l = 0, r = i-1;
        while (l < r) {
            if (A[l] + A[r] > A[i]) {
                count += r-l;
                r--;
            }
            else l++;
        }
    }
    return count;
}
先排序然后从大向前比较,小两边只和大于第三边则成立。复杂度:o(n2)

<think>好的,我现在需要帮助用户寻找关于用Java编写计算三角形周长的PTA练习题或选择题。首先,用户提到可能与PTA平台相关,并且参考了之前的引用内容,特别是引用[1]和引用[2],这两个引用提到了Java和C++中计算周长和面积的方法。因此,我应该结合这些信息来生成相关问题。 首先,我需要确认用户的需求。用户想要的是练习题或选择题,涉及Java编程,特别是计算三角形周长,可能与PTA平台上的题目类似。根据引用[1],其中有一个关于编写getPerimeter和getArea方法的例子,虽然题目是关于其他形状的,但可以借鉴来设计三角形的问题。引用[2]中的C++例子同样涉及周长和面积的计算,但需要转换为Java语法。 接下来,我需要考虑如何设计这些题目。选择题通常测试语法知识、逻辑错误或方法实现。而编程题可能需要用户编写完整的类或方法。例如,可以设计一个Triangle类,要求用户实现计算周长的方法,同时处理输入验证,比如三边是否满足三角形不等式定理。 对于选择题,可以围绕常见的错误点,比如三边是否合法、公式是否正确、数据类型的处理等。例如,选项可能包含未验证三角形合法性的情况,或者周长计算错误的情况。 另外,用户可能需要考虑测试用例的设计,比如输入无效值时的处理,这可以作为编程题的一部分,要求用户添加异常处理或条件判断。 需要确保题目符合PTA平台的风格,通常PTA题目会有输入输出样例,明确的类和方法定义。因此,在生成编程题时,应该给出类结构和方法签名的具体要求,以及测试用例的示例。 同时,要参考引用[1]中的示例,比如使用toString方法自动生成,可能在题目中要求覆盖toString方法,以输出三角形的信息。但根据用户当前的需求,可能更关注周长的计算,因此可以简化其他部分。 最后,要验证生成的题目是否符合Java语法,是否涵盖了常见的错误点,以及是否能够有效测试用户的能力。例如,是否处理了三边为正数、是否满足三角形条件等。</think># Java计算三角形周长的PTA练习题 以下是根据PTA题型设计的Java编程题及选择题,包含三角形周长计算的核心考点: --- ### **编程题:三角形类实现** **题目描述** 实现`Triangle`类,要求: 1. 包含三个私有整型属性`a,b,c`表示三边长度 2. 构造方法`public Triangle(int a, int b, int c)`需验证三边合法性(任意两边之和大于第三边) 3. 方法`public int getPerimeter()`返回周长(非法三角形返回-1) 4. 方法`public boolean isValid()`判断是否为合法三角形 **输入样例** ```java Triangle t = new Triangle(3,4,5); System.out.println(t.getPerimeter()); // 应输出12 ``` **参考答案框架** ```java public class Triangle { private int a, b, c; public Triangle(int a, int b, int c) { // 此处补充构造方法逻辑 } public boolean isValid() { // 验证三角形合法性 } public int getPerimeter() { // 返回周长或-1 } } ``` --- ### **选择题** **1. 以下哪个代码片段能正确计算三角形周长?** A. ```java public int getPerimeter() { return a + b + c; } ``` B. ```java public int getPerimeter() { if (a + b > c) return a + b + c; else return -1; } ``` C. ```java public int getPerimeter() { if (isValid()) return a * b * c; else return -1; } ``` D. ```java public int getPerimeter() { return (a + b + c) / 2; } ``` **正确答案**:A **解析**:B选项仅验证了部分条件,C选项错误使用乘法,D计算的是半周长[^1]。 --- **2. 构造方法中验证三角形合法性的正确逻辑是?** A. `if (a + b > c)` B. `if (a + b > c || a + c > b || b + c > a)` C. `if (a + b > c && a + c > b && b + c > a)` D. 不需要验证 **正确答案**:C **解析**:三角形必须满足所有两边之和大于第三边[^2]。 --- ### **扩展练习建议** 1. 在`toString`方法中添加输出三边信息的功能(参考Eclipse自动生成格式) 2. 添加异常处理机制,当三边非法时抛出`IllegalArgumentException` 3. 实现面积计算方法(需使用海伦公式) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值