当前位置: 首页 > news >正文

openJudge | 距离排序 C语言

总时间限制: 1000ms 内存限制: 65536kB

描述

给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离。

输入

输入包括两行,第一行包含一个整数n表示点的个数,第二行包含每个点的坐标(坐标都是整数)。点的坐标的范围是0到100,输入数据中不存在坐标相同的点。

输出

对于大小为n的输入数据,输出n*(n-1)/2行格式如下的距离信息:
(x1,y1,z1)-(x2,y2,z2)=距离
其中距离保留到数点后面2位。
(用cout输出时保留到小数点后2位的方法:cout<

样例输入

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
  1. 如果有两对点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

答案

#include <stdio.h>
#include <math.h>
typedef struct {int start[3];int end[3];double dis;int weight;
} points;
int main() {static int n, p=0;static int a[10][4];static points point[1024], t;scanf("%d", &n);for(int i = 0; i < n; i++) {scanf("%d %d %d", &a[i][0], &a[i][1], &a[i][2]);}for(int i = 0; i < n; i++) {for(int j = i+1; j < n; j++) {point[p].start[0] = a[i][0];point[p].start[1] = a[i][1];point[p].start[2] = a[i][2];point[p].end[0] = a[j][0];point[p].end[1] = a[j][1];point[p].end[2] = a[j][2];point[p].dis = sqrt((a[i][0]-a[j][0])*(a[i][0]-a[j][0])+(a[i][1]-a[j][1])*(a[i][1]-a[j][1])+(a[i][2]-a[j][2])*(a[i][2]-a[j][2]));point[p].weight = p;p++;}}for(int i = 0; i < p; i++) {for(int j = i+1; j < p; j++) {if(point[i].dis < point[j].dis) {t = point[i];point[i] = point[j];point[j] = t;} else if(point[i].dis == point[j].dis) {if(point[i].weight > point[j].weight) {t = point[i];point[i] = point[j];point[j] = t;}}}}for(int i = 0; i < p; i++) {printf("(%d,%d,%d)-(%d,%d,%d)=%.2f\n", point[i].start[0], point[i].start[1], point[i].start[2], point[i].end[0], point[i].end[1], point[i].end[2], point[i].dis);}
}

至于weight,它的作用,就只是增加一个权重罢了。

相关文章:

  • OCP使用web console创建和构建应用
  • 设计模式理解:单例模式+工厂模式+建设者模式+原型模式
  • macbook电脑如何永久删除app软件?
  • 使用C#快速创建一个非常实用的桌面应用程序
  • 设计模式-建造者模式Builder
  • 【开源】SpringBoot框架开发桃花峪滑雪场租赁系统
  • Linux cksum命令教程:如何使用cksum命令检查文件完整性(附实例详解和注意事项)
  • 选择大语言模型:2024 年开源 LLM 入门指南
  • 【电路笔记】-并联电感
  • STM32自学☞PWM驱动舵机(按键控制)
  • ubuntu快速安装miniconda
  • Python学习之路-爬虫提高:常见的反爬手段和解决思路
  • 课程大纲:图像处理中的矩阵计算
  • TCP 粘包/拆包
  • AutoSAR(基础入门篇)8.6-实验:配置I/O
  • .pyc 想到的一些问题
  • 230. Kth Smallest Element in a BST
  • angular2开源库收集
  • Apache的80端口被占用以及访问时报错403
  • git 常用命令
  • iOS编译提示和导航提示
  • JavaScript 奇技淫巧
  • nginx 配置多 域名 + 多 https
  • Python进阶细节
  • React+TypeScript入门
  • Spring Boot快速入门(一):Hello Spring Boot
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • tab.js分享及浏览器兼容性问题汇总
  • Vim Clutch | 面向脚踏板编程……
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #14vue3生成表单并跳转到外部地址的方式
  • #图像处理
  • (02)vite环境变量配置
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (二)学习JVM —— 垃圾回收机制
  • (三)mysql_MYSQL(三)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)关于多人操作数据的处理策略
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net多线程总结
  • @EnableConfigurationProperties注解使用
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @synthesize和@dynamic分别有什么作用?
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [AR]Vumark(下一代条形码)
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [BZOJ] 2044: 三维导弹拦截