坐标系下的点的比较方案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(开根号与否自定);具体实现过程省略。

原文地址:https://www.cnblogs.com/savennist/p/12284849.html