早教吧作业答案频道 -->其他-->
一道C++编程题!距离排序[问题描述]给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离.输入:输入包括两行,第一行
题目详情
一道C++编程题!
距离排序
[问题描述]
给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离.
输入:
输入包括两行,第一行包含一个整数n表示点的个数,第二行包含每个点的坐标(坐标都是整数).点的坐标的范围是0到100,输入数据中不存在坐标相同的点.
输出:
对于大小为n的输入数据,输出n*(n-1)/2行格式如下的距离信息:
(x1,y1,z1)-(x2,y2,z2)=距离
其中距离保留到数点后面2位.
采用冒泡排序,快速排序,选择排序中的两种排序算法实现排序功能.
距离排序
[问题描述]
给出三维空间中的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;
}
/// 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++编程题!距离排序[...的网友还看了以下:
甲、乙两个车间工人人数不等,若甲车间调10人给乙车间,则两车间人数相等;若乙车间调10人给甲车间则 2020-04-05 …
数学题啊.60.某工厂有甲、乙两个车间,甲车间与乙车间人数的比是3:7,从乙车间调走30人到甲车间 2020-04-09 …
★★7两个车间要组装7200台电视机,第一车间每天组装250台,第二车间5天的组装量第一车间4天就 2020-06-06 …
两个车间要组装7200台电视机,第一车间每天组装250台,第二车间5天的组装量第一车间4天就能完成 2020-06-06 …
已知有甲乙两个车间共310人,甲车间人数的3/5和乙车间的2/7相等,则甲乙车间各有多少人?已知有 2020-07-09 …
某外资企业,有甲、乙两个车间,原来甲车间的人数是乙车间人数的七分之五.吐过从乙车间调8人到甲车间, 2020-07-14 …
卧室有五十个平方左右,中间有一块2.5米的墙挡了一半,相当于两间,每间南北两个窗户,那道墙是彻底封 2020-07-27 …
下列说法正确的是()A.两点之间直线最短B.画出AB两点间的距离C.连接点A与点B的线段,叫做AB 2020-08-03 …
在光滑的水平轨道上有两个半径都是r的小球A和B,质量分别为m和2m,当两球心间的距离大于L(L比2r 2020-11-10 …
某工厂三个车间救灾捐款,甲车间捐款数是另外两个车间捐款数的三分之一,乙车间捐款数是另外两个车间捐款数 2020-12-10 …