long m = 24 * 60 * 60 * 1000 * 1000;
Run Code Online (Sandbox Code Playgroud)
上面的代码创建溢出并且不会打印正确的结果.
long m2 = 24L * 60 * 60 * 1000 * 1000;
long m3 = 24 * 60 * 60 * 1000 * 1000L;
Run Code Online (Sandbox Code Playgroud)
以上2行打印正确的结果.
我的问题是 -
m2还是m3?编辑:n是人数.k是被淘汰的第k个人.所以对于k = 2,每个第二个人都被淘汰了.
int josephus(int n, int k)
{
if (n == 1)
return 1;
else
return (josephus(n - 1, k) + k-1) % n + 1;
}
Run Code Online (Sandbox Code Playgroud)
代码尽可能简单.但不知怎的,我无法理解这个问题(说实话有点尴尬).
我试图理解它的方式是,
主要的问题是,如果我们知道约瑟夫斯(n-1,k)的正确解,我们如何计算约瑟芬(n,k)的解.我们已经有效地向人群添加了一个人,并且以某种方式添加这个k-1值给了我正确的解决方案(让我们暂时忽略mod).
任何人都可以向我解释一下,在问题的每一步中,最佳子结构属性如何保持?
我的理解是它看起来与抽象工厂非常相似。
笔记:
执行器界面:
public interface Executor {
public void execute();
}
Run Code Online (Sandbox Code Playgroud)
然后是一个Executors包含各种Executor实现的静态工厂的类。