『软件测试』存在序列:1,1/2,2/3,3/5,5/8,8/13...,求前10项的和

217 阅读2分钟

由题可以得知,分子是前一个数字项的分母,分母是前两个数字项的分母之和,由此可得代码:

使用 Python 编程语言解题:

"""
存在序列:1, 1/2, 2/3, 3/5, 8/13, ... 的序列,求这个数列的前10项之和
"""
a = 1 	# 分子
b = 1 	# 分母
s = 0	# 数列和

for i in range(10):
	s += a/b
	a, b = b, a+b
print("结果是 {:.2f}".format(s))		# 结果保留小数点后两位

此处应注意:a, b = b, a+ba=b , b=a+b的区别 a, b = b, a+b是先运算赋值号=左边的数值,再依次赋值给左边的数值,即:

当 a = 1,b = 2 时: b = 2 a+b = 2+1 再分别赋值给 a 和 b,即a = 2,b = 3

a=b , b=a+b是依次运行赋值,即

当 a = 1,b = 2 时: a = b = 2 b = a+b = 2+2 即a = 2,b = 4

故这是此两个赋值表达式的区别! 故其输出结果为: 结果

使用 TypeScript 编程语言解题:

python 编程语言我们可以得知,此时 xy 两个变量会同时赋值,故其解题步骤如下:

function sequence() {
    let x = 1, y = 1;
    let sequenceSum = 0;

    for (let number = 0; number < 10; number++) {
        sequenceSum += x / y
        [x, y] = [y, x + y];
    }
    // 结果保留后两位小数
    console.log(sequenceSum.toFixed(2))
}
sequence()

输出结果:保留两位小数,故等于6.48 结果

使用 Go 语言进行解题:

python 编程语言我们可以得知,此时 xy 两个变量会同时赋值,故其解题步骤如下:

package main

import (
	"fmt"
	"strconv"
)

func main() {
	arrList()
}

func arrList() {
        // 获取初始值
        var x float64 = 1
        var y float64 = 1
        var sum float64

        for i := 0; i < 10; i++ {
           sum += x / y
           x, y = y, x+y
        }

	// 保留小数点后两位
	value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", sum), 64)
	fmt.Println(value)

}

输出结果:保留两位小数,故等于6.48 GO语言

使用 Java 语言解题

python 编程语言我们可以得知,此时 xy 两个变量会同时赋值,由于在 java 中我不懂得如何使用类似python 语言中a, b = b, a+b 这样的赋值表达式,故采用了新的值z进行接收变化前的x,从而达到解题的目的。故其解题步骤如下:

package main;

public class test {
    public static void main(String[] args) {
        // 获取初始值
        double x  = 1;   // 分子
        double y  = 1;   // 分母
        double z;        // 中间缓存
        double sum = 0;  // 数列和

        for (int number = 0; number < 10; number++) {
            sum += x / y;
            z = y;
            y = x + y;
            x = z;
        }

        // 保留小数点后两位
        System.out.printf("%.2f%n", sum);
    }
}

输出结果:保留两位小数,故等于 6.48

java