OpenJudge-计算点的距离并排序

复制代码
/*=====================================================================
距离排序
总时间限制: 1000ms 内存限制: 65536kB
描述
给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离。
输入
输入包括两行,第一行包含一个整数n表示点的个数,第二行包含每个点的坐标(坐标都是整数)。点的坐标的范围是0到100,输入数据中不存在坐标相同的点。
输出
对于大小为n的输入数据,输出n*(n-1)/2行格式如下的距离信息:
(x1,y1,z1)-(x2,y2,z2)=距离
其中距离保留到数点后面2位。
(用cout输出时保留到小数点后2位的方法:cout<<fixed<<setprecision(2)<<x)
样例输入
4
0 0 0 1 0 0 1 1 0 1 1 1
样例输出
(0,0,0)-(1,1,1)=1.73
(0,0,0)-(1,1,0)=1.41
(1,0,0)-(1,1,1)=1.41
(0,0,0)-(1,0,0)=1.00
(1,0,0)-(1,1,0)=1.00
(1,1,0)-(1,1,1)=1.00
提示
用cout输出时保留到小数点后2位的方法:cout<<fixed<<setprecision(2)<<x

注意:
冒泡排序满足下面的性质,选择排序和快速排序(qsort或sort)需要对下面的情况进行额外处理
使用冒泡排序时要注意边界情况的处理,保证比较的两个数都在数组范围内

1. 对于一行输出中的两个点(x1,y1,z1)和(x2,y2,z2),点(x1,y1,z1)在输入数据中应出现在点(x2,y2,z2)的前面。

比如输入:
2
0 0 0 1 1 1
输出是:
(0,0,0)-(1,1,1)=1.73
但是如果输入:
2
1 1 1 0 0 0
输出应该是:
(1,1,1)-(0,0,0)=1.73

2. 如果有两对点p1,p2和p3,p4的距离相同,则先输出在输入数据中靠前的点对。

比如输入:
3
0 0 0 0 0 1 0 0 2
输出是:
(0,0,0)-(0,0,2)=2.00
(0,0,0)-(0,0,1)=1.00
(0,0,1)-(0,0,2)=1.00
如果输入变成:
3
0 0 2 0 0 1 0 0 0
则输出应该是:
(0,0,2)-(0,0,0)=2.00
(0,0,2)-(0,0,1)=1.00
(0,0,1)-(0,0,0)=1.00
=======================================================================*/
复制代码

解析:排序练习题,注意排序要保证稳定性。

复制代码
 1 #include<iostream>
 2 #include<cmath>
 3 #include <iomanip>
 4 using namespace std;
 5 struct dian
 6 {
 7     int xx,yy,zz;
 8 };
 9 struct juLi
10 {
11     dian a,b;
12     double len;
13 };
14 int main()
15 {
16     struct dian A[12];
17     struct juLi B[50],TEMP;
18     int n,i,j,t;
19     int flag;
20     freopen("4.in","r",stdin);
21     cin>>n;
22     for(i=0;i<n;i++)
23     {
24         cin>>A[i].xx>>A[i].yy>>A[i].zz;
25     }
26     t=0;
27     for(i=0;i<n-1;i++)
28     {
29         for(j=i+1;j<n;j++)
30         {
31             B[t].a=A[i];
32             B[t].b=A[j];
33             B[t].len=sqrt((B[t].a.xx-B[t].b.xx)*(B[t].a.xx-B[t].b.xx)+
34                           (B[t].a.yy-B[t].b.yy)*(B[t].a.yy-B[t].b.yy)+
35                           (B[t].a.zz-B[t].b.zz)*(B[t].a.zz-B[t].b.zz));
36             t++;
37         }
38     }
39     
40     for(i=1;i<t;i++)
41     {
42         flag=1;
43         for(j=0;j<t-i;j++) 
44         {
45             if(B[j].len<B[j+1].len) 
46             { 
47                 flag=0;
48                 TEMP=B[j]; 
49                 B[j]=B[j+1]; 
50                 B[j+1]=TEMP; 
51             }
52         }
53         if(flag)  break;  //if(flag==1)  break;
54     }
55     
56     for(i=0;i<t;i++)
57     {
58         cout<<'('<<B[i].a.xx<<','<<B[i].a.yy<<','<<B[i].a.zz<<')';
59         cout<<'-';
60         cout<<'('<<B[i].b.xx<<','<<B[i].b.yy<<','<<B[i].b.zz<<')';
61         cout<<'=';
62         cout<<setiosflags(ios::fixed)<<setprecision(2)<<B[i].len<<endl;
63     }
64     return 0;
65 }
View Code
复制代码

 

 

 

 

posted on   华山青竹  阅读(593)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示