平面点排序(一)

题目:平面上有n个点,坐标均为整数。请按与坐标原点(0,0)距离的远近将所有点排序输出。可以自己写排序函数,也可以用qsort库函数排序。

输入:输入有两行,第一行是整数n(1<=n<=10),接下来有n行,每行一对整数(每对整数对应一个点)。

输出:输出排序后的所有点,格式为(u,v),每个点后有一个空格。测试数据保证每个点到原点的距离都不同。

Exemple:

样例输入:4
           1 3 
           2 5 
           1 4 
   4 2

样例输出:(1,3) (1,4) (4,2) (2,5) 

解题思路:这道题要用结构体做,然后在结构体中除了有横坐标x,纵坐标y,还要定义一个到原点的距离d, 然后通过比较距离d的值来判断要不要交换2个坐标来进行排序。 然后这里交换俩坐标的时候也有一个小技巧,就是整体交换,定义一个t(t也是一个结构体,就是t里面包括了x和y两个东东),然后t作为2坐标交换的中间变量。

My Daima: 

#include<stdio.h>
#include<math.h>
struct point  //这是定义一个结构体
{
    double x,y,d;
};
int main()
{
    int i,j,n;
    struct point a[11],t;  //这里的t也是个结构体,到时候交换俩坐标时你就会发现特方便
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%lf%lf",&a[i].x,&a[i].y);
        a[i].d=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);  //这是计算每个点到原点的距离
    }
    for(i=1;i<n;i++)  //这是进行排序的操作,和数组排序一样一样的
    {
        for(j=0;j<n-i;j++)
        {
            if(a[j].d>a[j+1].d)  //比较每个点到原点的距离来判断是否交换坐标
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(i=0;i<n;i++)
        printf("(%.0lf,%.0lf) ",a[i].x,a[i].y);  //输出排序后的坐标,注意每个坐标后都有空格
    return 0;
}

 

全部评论

相关推荐

2025-12-22 15:25
南京工业大学 运营
点赞 评论 收藏
分享
02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务