首页 > 其他分享 >PTA最短距离的两点

PTA最短距离的两点

时间:2024-03-25 22:31:36浏览次数:23  
标签:min int PTA ++ len 短距离 两点 plen

给出一些整数对,它们表示平面上的点,求所有这些点中距离最近的两个点。

输入格式:

测试数据有多组。对于每组测试,先输入一个整数N,表示点的个数,再输入N个点(以两个整数表示横纵坐标)。若N为0,则表示输入结束。

输出格式:

对于每组测试,输入所有点中距离最短的两点,格式为“(a,b) (c,d)”,其中,a,b,c,d分别表示第一、二个点的横纵坐标。若有多个点对之间距离最短,以先输入者优先(如第一组样例所示)。

输入样例: 

4
1 1
2 2
0 0
3 3
4
1 2
0 0
3 6
7 2
0

输出样例: 

(1,1) (2,2)
(1,2) (0,0)

解题思路:博主采用了暴力算法,可以去分别求出两点之间的距离,在求的过程中同时进行比较,找出最短的距离,最后再把等于最短距离的两点输出。

注意:

1.由于要多次去求两点的距离,这里将这部分直接写到自定义的float plen函数中。

2.在求最短距离的时候,记得先将前两个点的距离赋值给最短距离(其实直接将负数赋值给min也行,因为距离没有负值)。

3.关于打印,这里是去直接进行遍历求两个点的距离,当这个距离等于这个最短距离min时输出。

 代码如下:

#include<stdio.h>
#include<math.h>
float plen(int a, int b, int c, int d)
{
    float len = sqrt((a-c)*(a-c) + (b-d)*(b-d));
    return len;
}
int main()
{
    int n;
    int i, j;
    int x[10000], y[10000];//将点的横纵坐标分别存在这两个数组中
    while(1)
    {
        scanf("%d", &n);
        if(n == 0)
        {
            break;
        }
        for(i = 0; i < n; i++)
        {
            scanf("%d%d", &x[i], &y[i]);
        }
        //寻找最短距离
        float min = plen(x[0], y[0], x[1], y[1]);
        for(i = 0; i < n; i++)
        {
            for(j = i+1; j < n; j++)
            {
                float len = plen(x[i], y[i], x[j], y[j]);
                if(len < min)
                {
                    min = len;
                }
            }
        }
        //打印
        for(i = 0; i < n; i++)
        {
            for(j = i+1; j < n; j++)
            {
                if(min == plen(x[i], y[i], x[j], y[j]))
                {
                    printf("(%d,%d) (%d,%d)\n", x[i], y[i], x[j], y[j]);
                    break;
                }
            }
            if(min == plen(x[i], y[i], x[j], y[j]))
            {
                break;
            }
        }
    }
    return 0;
}

标签:min,int,PTA,++,len,短距离,两点,plen
From: https://blog.csdn.net/weixin_44190161/article/details/137027742

相关文章

  • pta L1-076 降价提醒机器人
    L1-076降价提醒机器人分数10全屏浏览切换布局作者 DAI,Longao单位 杭州百腾教育科技有限公司小T想买一个玩具很久了,但价格有些高,他打算等便宜些再买。但天天盯着购物网站很麻烦,请你帮小T写一个降价提醒机器人,当玩具的当前价格比他设定的价格便宜时发出提醒。......
  • netfilter与iptables的基本原理
    一、netfilter与iptables简介1.netfilter是什么Netfilter自1998年开发,2000年合并到LinuxKernelv2.4版本,是Linux内核提供的一个流量处理框架,用于实现对IP数据包的控制和过滤等功能。即:netfilter是Linux内核自带的防火墙架构。2.iptables是什么ip......
  • 解决主流办法没能HttpMediaTypeNotAcceptableException: No acceptable representatio
    问题描述:        写web项目时遇到一些小问题,前端请求后端死活报406错误问题,一些网络上主流的方法试过之后仍然无法解决问题。问题分析:        @RestController会在返回结果时直接返回对象,再由Spring将对象转为json,如果结果对象没有get方法,就会报以上错误......
  • PTA 拯救007
    在老电影“007之生死关头”(LiveandLetDie)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱——直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据说当年替身演员被最后一条鳄鱼咬住了脚,幸好穿的是特别加厚的靴子才逃过一劫。)设鳄鱼池是长宽为100......
  • PTA基础编程练习题目集 7—4 BCD解密
    题目描述:BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!现在,你的程序要读入这个错误的十进......
  • PTA 后缀式求值(整型版)
    我们人类习惯于书写“中缀式”,如 3+5*2 ,其值为13。(p.s.为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)而计算机更加习惯“后缀式”(也叫“逆波兰式”,ReversePolishNotation)。上述中缀式对应的后缀式是: 352*+现在,请对输入的后缀式进行求值。为了简化输入处......
  • iptables-save 命令使用总结
    转载请注明出处:iptables-save 命令在Linux系统中用于将当前运行的 iptables 防火墙规则导出到一个文件中。这对于备份规则、迁移规则或在不同系统间共享规则配置非常有用。基本用法基本用法是将当前的 iptables 规则保存到文件中,如下所示:iptables-save>/pat......
  • PTA:7-68 Redemption
    作者 郭天宸单位 山东大学(威海)Iamdreadfullysorryforyourbadexperience,suchalownumberofsubmissionsaswellaspassratesandmy inSHIZHANYI.Isetupsomechallengingdatapointsandsomealittltbithardproblems.Ifyouareintere......
  • PTA:7-66 华氏温度转换为摄氏温度
    作者 伍建全单位 重庆科技大学输入一个华氏温度,输出摄氏温度,其转换公式为:C=5(F-32)/9。输入格式:输入一个浮点型的华氏温度值。输出格式:输出摄氏温度。输入样例:在这里给出一组输入。例如:96输出样例:在这里给出相应的输出。例如:35.555556代码长度限制16KB......
  • PTA:7-73 n个小朋友分糖果
    作者 庄波单位 山东航空学院为了培养小朋友们分享的意识,老师教小朋友做分糖果的游戏,把自己带的糖果分给其他小朋友。首先,全班 n 个小朋友围成一个大圆圈,按排列顺序依次给他们编号 1,2,…,n。然后,从 1 号小朋友开始,将自己的糖果平均分成三份(如果有多余的糖果则立即吃......