P9423 [蓝桥杯 2023 国 B] 数三角 题解
思路
使用三重循环枚举每个坐标,使用勾股定理求每两点之间的距离。最后判断这
代码
Python:
import math #注意一定要导入math库
n = int(input())
ans = 0
a = [None] + [list(map(int, input().split())) for _ in range(n)]
def len(xx, yy):
return math.sqrt((a[xx][0]-a[yy][0])**2 + (a[xx][1]-a[yy][1])**2) #勾股定理
for i in range(1, n+1):
for j in range(1, i):
for k in range(1, j):
len1 = len(i, j)
len2 = len(j, k)
len3 = len(i, k)
if len1+len2>len3 and len2+len3>len1 and len1+len3>len2:
if len1==len2 or len2==len3 or len1==len3:
ans += 1
print(ans)
C++:
#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
struct node{
int x,y;
}a[10005];
double len(int xx,int yy){
return sqrt((a[xx].x-a[yy].x)*(a[xx].x-a[yy].x)+(a[xx].y-a[yy].y)*(a[xx].y-a[yy].y))*1.00;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y;
}
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
for(int k=1;k<j;k++){
double len1=len(i,j);
double len2=len(j,k);
double len3=len(i,k);
//cout<<len1<<" "<<len2<<" "<<len3<<endl;
if(len1+len2>len3&&len2+len3>len1&&len1+len3>len2){
//cout<<1<<endl;
if(len1==len2||len2==len3||len1==len3) ans++;
}
}
}
}
cout<<ans;
return 0;
}