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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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