这是一个工作申请的问题: “父亲有两个儿子和999幅绘画,每幅画都有不同的价值:第一个是价值1,第二个是价值2等等,直到最后的绘画价值999.他想把他所有的绘画分给他的两个儿子,这样每个儿子都能得到同样的价值。有999种绘画可以用多少种方式来做? 例子:如果父亲有7幅绘画,他可以通过给予第一个儿子的绘画1,6和7来公平地分配他们。第二个儿子将得到2,3,4和5.两者总和等于14。如果有7个绘画,父亲可以将其分为4种方式(其他3种不在这里列出),因此解决方案为4. 提示:数字可能很大,因此请向我们发送解决方案的最后10位数字和草图。“父亲,两个儿子,999幅绘画
我所做的就是尝试使用蛮力的方法,通过写这写它与环内环路自己的C#程序,像这样的一个C#程序追加了所有可能的组合:
StringBuilder sb = new StringBuilder();
for (short i = 2; i <= 999; i++) //starts from 2 because 1 is always added to the total for one side
{
sb.AppendLine("for (byte i" + i.ToString() + " = 0; i" + i.ToString() + " < 2; i" + i.ToString() + "++)");
sb.AppendLine("{");
}
for (int i = 2; i <= 999; i++)
{
sb.Append("if (i" + i.ToString() + " == 1) { total += " + i.ToString() + "; }\n");
}
for (short i = 2; i <= 999; i++)
{
sb.AppendLine("}");
}
然后在结果中,如果块之后添加此:
if (total == 249750)
{
count++; //count is a BigInteger
}
total = 1;
这种做法应该在技术上的工作(如在画一个小数目测试),但问题是它是一个HUUUGE号,它会采取像一万年或者在我的电脑上计算结果这样...有一些数学技巧在合理的时间内做到这一点?
要问...你真的打算申请这份工作吗?如果你不能通过最初的面试问题而没有进入SO,你确定这是你真正想要/准备好的工作吗? – 2014-10-02 01:05:26
地狱没有,这是我的联盟的方式:D 目前,至少... – infamous 2014-10-02 01:08:43
是的我明白,我不问,所以我可以欺骗面试,我问,所以我可以学习新的东西并希望为我的技能组添加新内容。 我发布了这个链接,以防万一能够解决的人可以申请,如果他想要并且符合要求。 (它被mod编辑出来,显然这违反了规则) – infamous 2014-10-02 01:13:59