3-點的座標及最遠距離問題

outer_star發表於2018-08-04

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學長提供以上題目練習)

相關文章