• 坐标系下的点的比较方案1


    第一种比较方案是一维线性空间中的大小,这基本上是按照数据在内存中的顺序进行排列的,一定意义上是地址越大 点就越大。这里由一道UVA题目中这样要求:在一定的二维数组中由n个已知的点,输入所有点后,分析其中的每一个点(x,y)输出一个坐标(ax,ay)使得ax>x且ay>y且使得ax尽量小的前提下使得ay尽量小。对于这样的状况,我进行了一个简单的设计,代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 using namespace std;
     7 struct point
     8 {
     9     int x,y;
    10     int num;
    11     int pi;
    12     bool operator<(const point& rhs)
    13     {
    14         return this->num<rhs.num;
    15     }
    16 };
    17 const int maxn = 400;
    18 //int X[maxn],Y[maxn];
    19 point aim[maxn];
    20 
    21 int main()
    22 {
    23     freopen("input.txt","r",stdin);
    24     int n,a,b;
    25     cin>>n;
    26     for(int i=0;i<n;i++)
    27     {
    28         cin>>a>>b;
    29         //X[i]=a;Y[i]=b;
    30         aim[i].x=a;
    31         aim[i].y=b;
    32         aim[i].num=a*1000+b;
    33         aim[i].pi=i;
    34     }
    35     sort(aim,aim+n);
    36     //
    37 //    for(int i=0;i<n;i++)
    38 //    {
    39 //        printf("(%d,%d) num->%d ->%d
    ",aim[i].x,aim[i].y,aim[i].num,aim[i].pi);
    40 //    }
    41     //
    42     for(int i=0;i<n;i++)
    43     {
    44         for(int k=0;k<n;k++)
    45         {
    46             if(aim[k].pi!=i)continue;
    47             bool no=true;
    48             int px=aim[k].x,py=aim[k].y;
    49             for(int p=k+1;p<n;p++)
    50             {
    51                 if(aim[p].x>px&&aim[p].y>py)
    52                 {
    53                     printf("(%d,%d)
    ",aim[p].x,aim[p].y);
    54                     no=false;break;
    55                 }
    56             }
    57             if(no)printf("-1
    ");
    58             break;
    59         }
    60     }
    61     return 0;
    62 }
    View Code

    下面展示上面这个代码的运行情况,数据并未使用过于复杂的情形;

    输入数据:
    5
    5 9
    9 6
    4 10
    7 4
    2 2
    输出数据:
    (2,2) num->2002 ->4
    (4,10) num->4010 ->2
    (5,9) num->5009 ->0
    (7,4) num->7004 ->3
    (9,6) num->9006 ->1
    -1
    -1
    -1
    (9,6)
    (4,10)

    第二种方案是距离原点的距离,这种情形的实现基本简单。对于(x,y)其距离是x*x+y*y(开根号与否自定);具体实现过程省略。

  • 相关阅读:
    随意给一组数,找出满足一下条件的a[i],a[i]左边的数小于等于a[i],a[i]右边的数大于等于a[i]
    SVN
    四种进程或线程同步互斥的控制方法
    二叉树转双向链表
    最大连续子序列和
    找出一个字符串中第一个只出现一次的字符
    清除浮动的那些事
    jQuery中ready与load事件的区别
    css 经典布局之圣杯布局(左右固定,中间自适应)
    window.name + iframe跨域实例
  • 原文地址:https://www.cnblogs.com/savennist/p/12284849.html
Copyright © 2020-2023  润新知