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学长提供以上题目练习)