我想根据图像中的公式计算数组的深度。 我已经实现了以下代码,但无法获得正确的结果。 输入包含数组n和元素的大小
depth=0;
for(int i=0;i<n-1;i++)
{
depth=depth+arr[i]+(1/arr[i+1]);
}
答案 0 :(得分:0)
尝试此操作,最简单的方法是递归-
static double calc_depth(int arr[], int i) {
return arr[i] + (i<arr.length-1 ? + (1.0 / calc_depth(arr, i+1)) : 0.0);
}
public static void main(String args[]) {
int[] a = {2, 1};
System.out.println(calc_depth(a, 0));
}
答案 1 :(得分:0)
我现在没有C ++编辑器,但是想法是一样的: 您可以按照自己的方式进行操作,这是我的python代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
def cal(arr):
depth, n = 0.0, len(arr)
# go from n - 1 to 0
for i in range(n - 1, -1, -1):
if depth == 0.0:
depth = arr[i]
else:
depth = (arr[i] + 1.0 / depth)
return depth
arr = [10, 20, 30]
print cal(arr)
正如我在评论中提到的,如果要迭代实现,则需要从n-1到0,而不是0到n-1,并且需要解决基本情况。 另外,可以以递归的方式将其作为第一个答案。
答案 2 :(得分:0)
似乎同时已删除了C ++,因此,如果您仍然想要c ++,这里几乎是一句话:
#include <vector>
#include <numeric>
double depth(const std::vector<double>& array){
return std::accumulate(array.rbegin(),array.rend(),std::numeric_limits<double>::infinity(),[](double s, double a){
return a + 1.0/s;
});
}
#include <iostream>
int main(){
std::vector<double> v{ 1.0,2.0,3.0, 4.0, 5.0, 6.0, 7.0, 8.0};
std::cout<<depth(v);
}
但是由于浮点精度,您无法获得连续分数的非常精确的结果。
答案 3 :(得分:0)
您可以这样做:
double ans=0;
for(int i=n-1;i>1;i--){
arr[i-1] = arr[i-1] + (double)(1/arr[i]);
ans = arr[i-1];
}