HDU 5365(不是地球人)

本文介绍了一种通过计算点之间的距离来判断四个点是否构成正方形的算法,并提供了具体的C语言实现。此方法适用于在二维平面上快速识别正方形。

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

题目给你一些点让你求构成正3、4、5、6边形的有多少。

题解:构成正3、5、6边形的不可以是整点。

所以题目转换为4点判断是不是正方形。

4边相等在加上一个直角就可以了。

#include<stdio.h>
#include<string.h>
struct node
{
    int x,y;
}a[22];
int dis(node a1,node a2)
{
    return (a1.x-a2.x)*(a1.x-a2.x)+(a1.y-a2.y)*(a1.y-a2.y);
}
int fabs(int x)
{
    return x<0?-x:x;
}
int panduan2(node a1,node a2,node a3,node a4)
{
    node n1,n2;
    n1.x=a1.x-a3.x;
    n1.y=a1.y-a3.y;
    n2.x=a1.x-a2.x;
    n2.y=a1.y-a2.y;
    if(n1.x*n2.x+n1.y*n2.y==0)return 1;
    return 0;
}
int panduan(node a1,node a2,node a3,node a4)
{
    int d1,d2,d3,d4;
    d1=fabs(dis(a1,a2));
    d2=fabs(dis(a1,a3));
    d3=fabs(dis(a2,a4));
    d4=fabs(dis(a3,a4));
    if(d1==0)return 0;
    if(d1==d2&&d1==d3&&d1==d4&&panduan2(a1,a2,a3,a4))return 1;
    return 0;
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)
            scanf("%d%d",&a[i].x,&a[i].y);
        long long sum=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                for(int k=0;k<n;k++)
                {
                    for(int k2=0;k2<n;k2++)
                    {
                        if(i==j||i==k||i==k2||j==k||j==k2||k==k2)continue;
                        if(panduan(a[i],a[j],a[k],a[k2]))
                            sum++;
                    }
                }
            }
        }
        printf("%lld\n",sum/8);
    }
    return 0;
}
/*
6
0 0
0 1
1 1
1 0
0 2
1 2


*/


HDU 2034 是一道经典的 A-B Problem 题目,通常涉及简单的数学运算或者字符串处理逻辑。以下是对此类问题的分析以及可能的解决方法。 ### HDU 2034 的题目概述 该题目要求计算两个数之间的差值 \(A - B\) 并输出结果。需要注意的是,输入数据可能存在多种情况,因此程序需要能够适应不同的边界条件和特殊情况[^1]。 #### 输入描述 - 多组测试数据。 - 每组测试数据包含两行,分别表示整数 \(A\) 和 \(B\)。 #### 输出描述 对于每组测试数据,输出一行表示 \(A - B\) 的结果。 --- ### 解决方案 此类问题的核心在于正确读取多组输入并执行减法操作。以下是实现此功能的一种常见方式: ```python while True: try: a = int(input()) b = int(input()) print(a - b) except EOFError: break ``` 上述代码片段通过循环不断接收输入直到遇到文件结束符 (EOF),适用于批量处理多组测试数据的情况。 --- ### 特殊考虑事项 尽管基本思路简单明了,在实际编码过程中仍需注意以下几点: 1. **大数值支持**:如果题目中的 \(A\) 或 \(B\) 可能非常大,则应选用可以容纳高精度的数据类型来存储这些变量。 2. **负数处理**:当 \(B>A\) 导致结果为负时,确保程序不会因符号错误而失效。 3. **异常捕获**:为了防止运行期间由于非法字符或其他意外状况引发崩溃,建议加入必要的错误检测机制。 --- ### 示例解释 假设给定如下样例输入: ``` 5 3 7 2 ``` 按照以上算法流程依次完成各步操作后得到的结果应当分别为 `2` 和 `5`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值