3-点的坐标及最远距离问题

2018.7.29

3-0 最远距离

输入是一个n,表示坐标轴上点的个数,然后输入一系列的浮点数,第i个数字代表距离第i-1个点的距离的平方,那么第i个点可能在第i-1个点的左侧,也有可能是右侧,求出第n个点到第1个点的最远可能的距离。注意:第一个输入的点代表的是第一个点所在的具体坐标。

例如输入:

5

-5 4 2.25 1 0

输出为:

4.5

 

3-1 不仅要输出最远距离,还要输出这个构成最短距离的可能的点的序列。

例如刚才的输出为:

4.5

-5 -3 -1.5 -0.5


代码1:(自己写的):

#include <iostream>
#include <stdio.h>
#include <math.h>
const int x = 100;

using namespace std;

float a[x];         //数组用来保存输入的浮点型数
int main()
{
    int n;
    float sum;
    scanf("%d",&n);
    scanf("%f",&a[0]);
    for(int i=1;i<n;i++)
    {
        scanf("%f",&a[i]);
        a[i]=sqrt(a[i]);
    }
    for(int j=1;j<n;j++)
    {
        sum+=a[j];
    }
    printf("%0.1f\n",sum);

    for(int i=0;i<n-1;i++)
    {
        a[i+1]=a[i]+a[i+1];
        printf("%0.1f\t",a[i]);
    }

    return 0;
}

代码2:(西交wrong):

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
using namespace std;
const int maxn = 100000;
typedef pair<int,int> P;
double out[maxn]; //
int main()
{
    int n;
    double x;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lf",&x);
        if(i==1) out[i]=x;
        else out[i]=out[i-1]+sqrt(x);
    }
    //out[1] out[1]+sqrt(x[2]) out[1]+sqrt(x[2])+sqrt(x[3])
    cout<<out[n]-out[1]<<endl;
    for(int i=1;i<=n;i++)
        cout<<out[i]<<" ";
    cout<<endl;
   return 0;
}

(感谢西交wrong学长提供以上题目练习)

猜你喜欢

转载自blog.csdn.net/outer_star/article/details/81415298