序列3,0,1,6,7中的下一个数字是什么?以及如何将此序列编码为n位数字?

时间:2019-06-12 06:55:04

标签: algorithm sequence

在编程测试中回答了这个问题。实际的问题是要计算该序列直到n位数字并计算其总和。问题说,“ 3,0,1,6,7是序列的前五个数字”

3 个答案:

答案 0 :(得分:3)

这是一个非常简单的数字序列问题。 假设:给定的数字序列具有类似数组的序号。

数组索引:1 2 3 4 5 6 7

逻辑:+2 -2 -2 +2 +2 -2 -2

顺序:3 0 1 6 7 4 5 ....

如果我们遵循零索引,则数字序列将是 2,3,0,1,6,7,4,5 ...等 使用两次加法和两次减法。.继续到给定范围。

Java代码:

int n=10;
int sequence[]=new int[n+1];
int i=0;
boolean flag=true;
while(i<n)
{
    if(flag)
    {
        sequence[i]=i+2;
        i++;
        sequence[i]=i+2;
    }else
    {
        sequence[i]=i-2;
        i++;
        sequence[i]=i-2;
    }
    i++;
    flag=!flag;
}

for(i=0;i<n;i++)
{
    System.out.print(sequence[i]+" ");
} 

答案 1 :(得分:0)

正如@mukesh-prajapati所说的那样,它对n个自然数连续两次加减2和-2的顺序。

您可以在python中将此代码编写为:

n = int(input())
sum = 0
flag1 = 0
flag2 = 0
for i in range(1,n):
    if(flag1 == 0 and flag1 == flag2):
        print(i+2, end=" ")
        sum += i+2
        flag1 = 1
    elif(flag1 == 0 and flag1 != flag2):
        print(i+2, end=" ")
        sum += i+2
        flag2 = 0
    elif(flag1 == 1 and flag1 == flag2):
        print(i-2, end=" ")
        sum += i-2
        flag1 = 0
    else:
        print(i-2, end=" ")
        sum += i-2
        flag2 = 1
print("\nSum: " + str(sum))

答案 2 :(得分:0)

如果您编程测试中的序列确实基于 +2/-2 模式,那么它将在第 5 个元素处重复,因此,我们可以缩短它并应用模运算来找到第 n 个元素:< /p>

nth_number = lambda n: n + [+2, +2, -2, -2][n % 4]

对于求和,我们必须观察到这些模式元素在求和过程中相互抵消,因此,我们还可以为求和找到一个缩短的重复模式:

n:          1  2  3  4   5  6  7  8   9 ...
modifier: [+2 -2 -2 +2][+2 -2 -2 +2][+2 ... ]
sum:      [+2  0 -2  0][+2  0 -2  0][+2 ... ]

有了这个缩短的序列,我们可以再次使用模运算,这次由 triangular number 辅助,计算总和:

sum_up_to_n = lambda n: n * (n-1)/2 + [+2,  0, -2,  0][(n-1)%4]

这种方法是 O(1)。其他方法是 Pseudo-polynomial O(n)。代码在 Python3 中。