早教吧 育儿知识 作业答案 考试题库 百科 知识分享

一道C++编程题!距离排序[问题描述]给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离.输入:输入包括两行,第一行

题目详情
一道C++编程题!
距离排序
[问题描述]
给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离.
输入:
输入包括两行,第一行包含一个整数n表示点的个数,第二行包含每个点的坐标(坐标都是整数).点的坐标的范围是0到100,输入数据中不存在坐标相同的点.
输出:
对于大小为n的输入数据,输出n*(n-1)/2行格式如下的距离信息:
(x1,y1,z1)-(x2,y2,z2)=距离
其中距离保留到数点后面2位.
采用冒泡排序,快速排序,选择排序中的两种排序算法实现排序功能.
▼优质解答
答案和解析
/// test.cpp:
/// CopyRight (c) 2014 Vobile Inc.
/// Author:XiaoH
/// Created:2014-06-23
#include
#include
#include
typedef struct point {
int x,y,z;
}POINT;
typedef struct disdence {
POINT a,b;
double dst;
}PD;
double Squ(double num) {
return num * num;
}
double Distance(POINT a,POINT b) {
return sqrt(Squ(a.x - b.x) + Squ(a.y - b.y) + Squ(a.z - b.z));
}
int main() {
POINT pt[10];
PD tmp,dst[45];
int i,j,k,n,N;
printf("数据点数 :");
scanf("%d",&n);
if(n > 10) n = 10;
N = n*(n - 1)/2;
for(i = 0;i < n;i++) {
printf("点%d :",i + 1);
scanf("%d %d %d",&pt[i].x,&pt[i].y,&pt[i].z);
}
k = 0;
for(i = 0;i < n - 1;i++) {
for(j = i + 1;j < n;j++) {
dst[k].a = pt[i];
dst[k].b = pt[j];
dst[k].dst = Distance(pt[i],pt[j]);
k++;
}
}
for(i = 0;i < N - 1;i++) {
k = i;
for(j = i + 1;j < N;j++) {
if(dst[k].dst < dst[j].dst)
k = j;
}
if(k != i) {
tmp = dst[k];
dst[k] = dst[i];
dst[i] = tmp;
}
}
for(i = 0; i < N; i++) {
printf("(%3d,%3d,%3d) -- ",dst[i].a.x,dst[i].a.y,dst[i].a.z);
printf("(%3d,%3d,%3d) :",dst[i].b.x,dst[i].b.y,dst[i].b.z);
printf("%.2lf\n",dst[i].dst);
}
return 0;
}
看了 一道C++编程题!距离排序[...的网友还看了以下:

平面直角坐标系在平面直角坐标系中,点P从原点O出发,每次向上平移2个单位长度或向右平移1个单位长度  2020-05-16 …

四个筛子每个点数出现的概率?(如;4、5、23、24分别为1次,那其他点数分别会出现几次呢?看到过  2020-06-02 …

在平面直角坐标系中,点A从原点O出发,每次向上移动2个单位长度或向右移动1个单位长度.(1)实验操  2020-06-14 …

在平面直角坐标系中,点P从原点O出发,每次向上平移2个单位长度或向右平移1个单位长度。(1)实验操  2020-06-25 …

flash做课件的习题,在同一个场景中怎么弄一个按钮点一次出一个答案,再点一次就出现下一个答案?就  2020-06-29 …

如图,数轴上一电子跳蚤Q从原点0出发,第1次沿数轴向右跳4个单位长度落在点A,第2次从点A出发沿数  2020-06-29 …

四个筛子每个点数出现的概率?(如;4、5、23、24分别为1次,那其他点数分别会出现几次呢?把那2  2020-07-29 …

如图,在平面直角坐标系中,点P从原点O出发,每次向上平移2个单位长度或向右平移1个单位长度.(1)  2020-07-30 …

若10颗骰子同时掷出,共掷5次,则至少有1次全部的出现点1次全部出现点1的概率为我的解题思路为:至少  2020-11-03 …

把一颗骰子投掷两次,观察出现的点数,并记第一次出现的点数为a,第二次出现的点数为b把一颗骰子投掷两次  2020-12-30 …