HDU 5206

本文介绍了一个用于判断三维空间中四个点是否能构成一对正交且等长向量的算法实现。通过计算点之间的距离和角度来验证四边形特性,使用C语言完成编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

恩。。。数学题。。。差点就不会了。。。

第一个点为参照,找到另外两个点,构成两条向量,垂直,模相等,然后对于剩下的那个点,看是否能和两个点构成垂直的两条向量。。

其实我是做的好烦躁,所以过来刷水题的。。恩。。

#include <stdio.h>
#include <stdlib.h>
int x[5],y[5],z[5];
int dis(int i,int j,int k)
{
   // printf("%d %d %d %d %d %d %d %d %d\n",x[i]-x[k],(x[i]-x[j]), (x[i]-x[k])*(x[i]-x[j]),y[i]-y[k],y[i]-y[j],(y[i]-y[k])*(y[i]-y[j]),z[i]-z[k],z[i]-z[j],(z[i]-z[k])*(z[i]-z[j]));
    return (x[i]-x[k])*(x[i]-x[j])+(y[i]-y[k])*(y[i]-y[j])+(z[i]-z[k])*(z[i]-z[j]);
}
int dist(int i,int j,int k)
{
    long long r1=abs(x[i]-x[j])*abs(x[i]-x[j])+abs(y[i]-y[j])*abs(y[i]-y[j])+abs(z[i]-z[j])*abs(z[i]-z[j]);
    long long r2=abs(x[i]-x[k])*abs(x[i]-x[k])+abs(y[i]-y[k])*abs(y[i]-y[k])+abs(z[i]-z[k])*abs(z[i]-z[k]);
    if(r1==r2) return 1;
    else return 0;
}
void print(int i){printf("x=%d y=%d z=%d\n",x[i],y[i],z[i]);}
int main()
{
    int T;
    scanf("%d",&T);
    int cas=1;
    for(cas=1;cas<=T;cas++)
    {
        int i,j,k;
        for(i=0;i<4;i++)
        {
            scanf("%d%d%d",&x[i],&y[i],&z[i]);
        }
        int flag=0;
        for(i=1;i<4;i++)
        {
            for(j=1;j<4;j++)
            {
                if(j==i) continue;
                int tmp=dis(0,i,j);
             //   print(i);print(j);printf("\n");
                if(tmp==0&&dist(0,i,j))
                {
                    for(k=1;k<4;k++)
                        if(k!=i&&k!=j) break;
                    if(dis(k,i,j)==0) {flag=1;break;}
                }
            }
            if(flag) break;
        }
        printf("Case #%d: ",cas);
        if(flag) printf("Yes\n");else printf("No\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值