求n维空间点的距离(改进版)

原题描叙:

请见http://blog.csdn.net/liuchang54/article/details/42341053;

代码如下:

#include <stdarg.h>
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
    double distance(int dime,double x1,double y1,double x2=0,double y2=0,double x3=0,double y3=0,double x4=0,double y4=0);
    int dime;
    double x1,y1,x2,y2,x3,y3,x4,y4,d;
    cout<<setiosflags(ios::fixed)<<setprecision(2);
    dime =1;
    cin>>x1>>y1;
    d = distance(dime,x1,y1);
    cout<<d<<endl;
    dime =2;
    cin>>x1>>y1>>x2>>y2;
    d = distance(dime,x1,y1,x2,y2);
    cout<<d<<endl;
    dime =3;
    cin>>x1>>y1>>x2>>y2>>x3>>y3;
    d = distance(dime,x1,y1,x2,y2,x3,y3);
    cout<<d<<endl;
    dime =4;
    cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
    d = distance(dime,x1,y1,x2,y2,x3,y3,x4,y4);
    cout<<d<<endl;
    return 0;
}

double distance(int dime,double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4)
{
    double sum=0,d[5];  //str[dime]毛病多
    int i=0;
    d[0]=x1-y1;
    d[1]=x2-y2;
    d[2]=x3-y3;
    d[3]=x4-y4;
    while (i<dime)
    {
        sum+=(d[i]*d[i]);
        i++;
    }
    sum=sqrt(sum);
    return sum;
}

运行结果:

之前的代码:

现在的代码:

由于(应该是出题的老师出得有问题)这个题目在OJ上始终无法成功完成,我就把题目和自己写的代码发给了我们上课的贺老师,贺老师也没办法解决无法提交的问题,但他把我写的代码优化了一番,于是便有了这篇博文。之前并不是没有想过利用数组的界限,但因为当时觉得变量数目比较小,就没有多花心思去编写,,,现在想想,如果是20维怎么办?还有很长很长的路要走啊。

时间: 2024-10-23 15:08:33

求n维空间点的距离(改进版)的相关文章

OJ刷题之《可变参数--求n维空间点之间的距离》

题目描述 利用可变参数求n(N<5)维空间两点之间的距离.n维空间两点X(x1,,,,xn),Y(y1,...,yn)之间的距离定义为: 部分代码已给定如下,只需要提交缺失的代码. #include <stdarg.h> #include <iostream> #include <math.h> #include <iomanip> using namespace std; int main() { double distance(int dime,.

结对开发(求二维首尾相接数组的最大子数组和)

一.题目要求 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 一.设计思想 求环形二维数组最大子数组的和,可以转化为求一维数组最大子数组的和 我们有一个最初的二维数组a[n][n]找它的 最大子数组之和 1.我们先建立一个新的二维数组b[n][2*n-1], 2,这个新的二维数组就是将初始的二

求二维数组中子数组和中最大的值,及子数组

求二维数组中子数组和中最大的值,及子数组 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:C++ ; 编程坏境:Windows 7 专业版 x64; 编程工具:vs2008; 制图工具:office 2010 powerpoint; 硬件信息:7G-3 笔记本; 真言 每次着急写程序,碰到问题就头疼,头疼之后便是满满的收获,付出总有回报. 题目 求

软件工程结对开发之求二维数组中连续最大子数组之和2

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 先调用以前求二维最大连续子数组之和的maxSubArray函数求一个首尾不相邻的二维最大连续子数组之和,接着用将第k列各元素左移一列可以再求一个最大连续子数组之和 ,循环m次(因为原二维数组有m列)求得每个

结对开发——求二维环形数组所有子矩阵最大和的问题

一.题目要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和. 二.解决思路: 由于上次我们做过求二维数组最大子矩阵和的问题,又做了求一维环状数组的子数组最大值问题,这次就在以前的基础上进行修改,先对二维数组进行了重构,形成一个环状二维数组,然后再用求二维数组子矩阵最大和的方法求得最终结果.

已知直线上的两点 A(x1, y1), B(x2, y2) 和另外一点 C(x0, y0),求C点到直线的距离。

数学知识太差,一点点积累,高手勿喷. 1. 先求出AB向量 a = ( x2-x1, y2-y1 ) 2. 求AB向量的单位方向向量 b = √((x2-x1)^2 + (y2-y1)^2)) a1 = ( (x2-x1)/b, (y2-y1)/b ) 3.求出CA的法向向量(或CB的法向向量) c = ( y0-y1, -(x0-x1) ) 4. 距离 = AC法向向量与BC向量的单位方向向量的数量积 距离d = a1 * c = ( (x2-x1)(y0-y1) - (y2-y1)(x0-x

图像检索:二维直方图+EMD距离

#include<iostream> #include<fstream> #include<map> #include<string> using namespace std; #include<opencv2\core\core.hpp> #include<opencv2\highgui\highgui.hpp> #include<opencv2\imgproc\imgproc.hpp> using namespace

使用Graham扫描法求二维凸包的一个程序

1 #include "includeall.h" 2 #include "Link.class.h" 3 4 int RightOrLeft(float x1,float y1,float x2,float y2,float x3,float y3)//判断第三个点在前两个点连成的直线的哪个位置,-1 左边,0,直线上,1 右边 5 { 6 float X=(y3-y1)*(x2-x1)/(y2-y1)+x1; 7 if(X<x3) 8 { 9 return

!Gym 100625J 狱警放两犯人的最小开门数-bfs-(优先队列+bfs,求各自到交点的距离)

题意:二维矩阵,狱警从外面到里面去放两个犯人,问中途需要开的门的最小的次数. 分析: 这题从外面进去,那么只要是矩阵边缘可走的点(除了墙壁的点)都可作为起点,还有两个终点,所以直接枚举起点再搜索是不可行的.这题的做法是用三次bfs,分别求得从外面到每一个可走点的最小距离(开门次数).两个犯人到每个可走点的最小距离,然后遍历一遍矩阵,把三个距离加起来,更新答案即可.求矩阵外面到矩阵里的最小距离是这么处理的:在输入的矩阵外面加上一圈可走点,然后从(0,0)的位置开始bfs即可(这样处理还有一个原因是