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