可能重复:
Easy interview question got harder: given numbers 1..100, find the missing number(s)
大家好,我不知道在哪里问这个问题但是因为这是一个算法问题。我已经面对一个数学问题而且在过去的几天里似乎无法克服它。它是这样的:
您将获得一台添加机器 总和一组由N + 1组成的数字 给出正整数1到N. 数字(例如机器给出 3作为第一个数字并输出3。 然后将其作为第二个数字给出6 和输出9.它给出了11作为 第三个数字和输出20. Etcetera 直到它处理了N + 1个数字)。 一个(也是唯一一个)数字是 重复。你怎么决定哪个 号码重复了吗?
这似乎是一个棘手的问题,如果只是一个问题,答案是“不可能的”,我真的很生气 - 这里有任何想法吗?
答案 0 :(得分:4)
从总和中减去(1 + 2 + .. + N)= N *(N + 1)/ 2.
编辑:如果N未知,找到小于给定总和的最大三角数并减去。
答案 1 :(得分:1)
如果您知道N
和总和S
,则答案为d = S - N*(N+1)/2
。
这是因为从1到N的所有数字的总和是triangular number,并且从1到N的每个数字出现一次(除了重复的数字之外)。
如果你不知道N,你可以N = floor((sqrt(8*S+1)-1)/2
。这可以从二次方程(n^2 + n)/2 = a
中推断出来。
答案 2 :(得分:1)
好的,你有:
X = 1 + 2 + ... + N + p, where 1<=p<=N
或者
X = N(N+1)/2 + p, 1<=p<=N
宣告:
S(N) = N(N+1)/2
你知道吗
S(N) < X < S(N+1), because 1<=p<=N
通过找到S(N)使得S(N)X。
,可以找到N.如果找到S(N),则从X中减去它,然后找到重复的数字。