所以,我已经看到了针对这个问题或类似问题的一些解决方案,但我真的想知道为什么 我的工作不起作用.它比我找到的很多解决方案更容易阅读,所以我很乐意让它发挥作用!
从1对兔子开始,2个月后开始繁殖.跑了n个月,兔子在生活了几个月后就死了.输入'6 3'应该返回4,但它返回3.
#run for n months, rabbits die after m months.
n, m = input("Enter months to run, and how many months rabbits live, separated by a space ").split()
n, m = int(n), int(m)
generations = [1, 1, 2] #Seed the sequence with the 1 pair, then in their reproductive month.
def fib(i, j):
count = 3 #we start at the 3rd generation.
while (count < i):
if (count < j):
generations.append(generations[count-2] + generations[count-1]) #recurrence relation before …Run Code Online (Sandbox Code Playgroud) 所以它工作正常,所需的两个主要变化只是检查x的平方根(还需要将我的检查案例从checkign翻转到余数到检查取幂).另一个变化是使用双倍显然是鲁莽的,因为数字将超过最大双倍.
这是CodeEval的一个挑战,我想Facebook首先提出这个问题.这就是我的大脑立即吐出的东西.它通过所有手动测试案例(例如10-> 1,25-> 2,3-> 0).我还没有看到任何其他解决方案,因为我想先看看我是如何用自己的想法做的.如果我离开基地,这将永远不会奏效,我会很感激有人这么说:P.如果这永远不会奏效,我必须找到一条新的方法,我会花更多的时间来讨论这个问题.
我不会立即看到任何不满足的情况......但这不是问题.我从来都不擅长计算运行时复杂度,但我认为我已经有太多的嵌套了.
我想从右边和左边检查(这在代码中更清楚一点),我会严重减少运行时间.我不确定这是不是就像我想的那样有效,或者其他循环仍然太多......或者两者兼而有之.
有什么想法吗?这是可以挽救的,还是应该废弃它并以新的方式思考?
问题和代码如下.谢谢你看:-)
致谢:这一挑战出现在2011年的Facebook黑客杯中.
双方数是一个整数X,可以表示为两个完美正方形的总和.例如,10是双平方,因为10 = 3 ^ 2 + 1 ^ 2.在给定X的情况下,您在此问题中的任务确定了可以将其写为两个方格的总和的方式.例如,10只能写为3 ^ 2 + 1 ^ 2(我们不计算1 ^ 2 + 3 ^ 2不同).另一方面,25可以写成5 ^ 2 + 0 ^ 2或4 ^ 2 + 3 ^ 2.
注意:不要尝试暴力攻击.不起作用.以下约束成立:
0 <= X <= 2147483647
1 <= N <= 100
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class DoubleSquares {
public static void main(String[] args) throws IOException {
File file = new File(args[0]);
BufferedReader …Run Code Online (Sandbox Code Playgroud)