给你n和坐标,求其中三个坐标能表示一个等腰三角形有多少种怎么写
时间: 2023-05-24 13:05:23 浏览: 66
题目描述:
给定n个平面上的点,求其中三个点能表示一个等腰三角形的方案数。
输入格式:
第一行包含整数n。
接下来n行,每行包含两个整数x和y,表示一个点的坐标。
输出格式:
输出一个整数,表示答案。
数据范围:
1≤n≤1000,
坐标的绝对值不超过10000。
输入样例:
5
0 0
0 1
0 3
0 7
0 10
输出样例:
15
解题思路:
找到每一个点和其他点之间的距离,并记录在map中。
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)
先去做掉i和j之间的距离,记录下同一个距离出现过几次。每个距离对应的点的个数记作cnt,那么可以组成的等腰三角形个数就是cnt*(cnt-1)/2,因为对于一个距离而言,有cnt个点与它相等,则每一对搭配都能组成一个等腰三角形,计算组合即可。
最后所有的结果加起来就是最终答案。
C++ 代码
相关问题
给你n和坐标,求其中三个坐标能表示一个等腰三角形有多少种java代码怎么写
以下是一个简单的Java代码,用于找出给定坐标中可以形成等腰三角形的三个点的数量:
```java
import java.util.Scanner;
public class IsoscelesTriangle {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入坐标总数n:");
int n = sc.nextInt();
int count = 0;
for (int i=1; i<=n; i++) {
for (int j=i+1; j<=n; j++) {
for (int k=j+1; k<=n; k++) {
if (isIsoscelesTriangle(i, j, k)) {
count++;
}
}
}
}
System.out.println("可以形成等腰三角形的三个点的数量为:" + count);
}
private static boolean isIsoscelesTriangle(int a, int b, int c) {
int ab = Math.abs(a - b);
int bc = Math.abs(b - c);
int ac = Math.abs(a - c);
return (ab == bc || ab == ac || bc == ac);
}
}
```
该程序首先要求输入坐标总数n,然后通过三层循环遍历所有可能的坐标组合。在每个组合中,使用isIsoscelesTriangle方法来检查是否可以形成等腰三角形。如果是,则将计数器count递增。最后程序输出结果,即形成等腰三角形的三个点的数量。
给你n个坐标,求其中三个坐标能表示一个等腰三角形有多少种java代码怎么写
以下是使用Java语言实现该功能的示例代码:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[][] points = new int[n][2];
for (int i = 0; i < n; i++) {
points[i][0] = scanner.nextInt();
points[i][1] = scanner.nextInt();
}
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if (isIsosceles(points[i], points[j], points[k])) {
count++;
}
}
}
}
System.out.println(count);
}
private static boolean isIsosceles(int[] p1, int[] p2, int[] p3) {
double d1 = distance(p1, p2);
double d2 = distance(p2, p3);
double d3 = distance(p3, p1);
return d1 == d2 || d2 == d3 || d3 == d1;
}
private static double distance(int[] p1, int[] p2) {
int dx = p1[0] - p2[0];
int dy = p1[1] - p2[1];
return Math.sqrt(dx * dx + dy * dy);
}
}
```
该程序首先读入坐标数量n,然后读入n个坐标。接着,它使用三层循环依次枚举所有的三元组坐标,并检查它们是否能组成一个等腰三角形。如果是,则计数器count加1。最后输出count的值。
具体地,isIsosceles方法接受三个点的坐标作为参数,并返回一个布尔值表示它们是否能组成一个等腰三角形。该方法使用distance方法计算三个顶点之间的距离,并使用等式d1 == d2 || d2 == d3 || d3 == d1检查是否有两个距离相等。如果有,则表示三角形是等腰的,方法返回true;否则返回false。
distance方法接受两个点的坐标作为参数,并返回它们之间的欧几里得距离。