建造躲避球队

时间:2015-02-06 07:44:05

标签: algorithm primes

教练正试图组建一个躲避球队。每个玩家都被分配了一个学生ID,如果一个玩家的ID除以其他玩家的ID,他们就会战斗。因此,沙发想要组建一个团队,以便没有人在团队中战斗。给定数字N(ID被指定为1到N),找出最小数量K. 沙发无法组建一个无人打架的团队。

input (N): 3 
output (K): 2 

例如,N = 3,

K = 3,{1,2,3} - >玩家1和2有一场战斗。

K = 2,{2,3} - >无人打架。

input (N): 4 
output (K): 2 

N = 4,

K = 4,{1,2,3,4} - >超过一对球员(1,2),(1,3)等,打架。

K = 3,{1,2,4},{2,3,4},{1,3,4} - >球员在所有球队中战斗。

K = 2,{2,3} - >无人打架。

所以基本上,给定N,找出沙发不能组成K球员的最小K,以便没有人打架。 (这也是K'+ 1的最大数量,沙发可以找到至少一个没有人打架的K'队伍。)

我和我的朋友提出的一个贪婪的解决方案是尝试从给定的N中找到最大值。最佳集合必须包含大数字,因为如果我们开始输入小数字,2,3,...,所有这些数字的乘数不能包括在内。因此,只要新数字不是已包含在集合中的某个数字的除数,我们就可以开始将N设置为N / 2。我们不完全确定这个解决方案是否正确,因此我们希望讨论解决方案的正确性并听取其他人的想法。

我被要求在在线编码测试期间解决这个编码问题,但无法弄清楚如何解决。

1 个答案:

答案 0 :(得分:-1)

我回答这个问题的方法是返回n + 1中的素数。

k是最小数字,这使得不可能有不对战的对,例如,至少有一对数字将另一对数均分,是吗?基于此,“最安全”的赌注是素数(因为它们不能相互分割)。一旦你添加非素数,你肯定会有一个“战斗”对。

  1. 案例1:n中的所有素数和数字1(平凡)。
  2. 案例2:n中的所有素数和n中的任何偶数(偶数可以除以2,这消除了此选项)。
  3. 案例3:所有素数和奇数(任何复合 - 非素数 - 奇数可以除以奇素数)。

    关于数学证明,我对案例3并不是100%肯定,但似乎是这种情况。

  4. 免责声明:我还没有收到面试的反馈,这可能是完全错误的。