- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试对 Finding the position at n? 中引用的问题进行编码.为此,我只使用了问题中发布的公式。我没有仔细阅读公式和答案,它们对我来说有点太复杂了。我用 python 编写了代码,它在此处表示。
这种舞蹈要求每位表演者遵循精确的舞步顺序:
• 第 0 阶段:首先,将起点设置在位置 0 以避开障碍物
• 第 1 阶段:向前迈出一步(+1 步)
• 第 2 阶段:向后退两步(-2 步)
• 为了遵循,您每次必须采取的步数以及下一步行动的方向都将通过特定的计算得出:您在前一阶段采取的步数减去您的步数进入倒数第二阶段。
也就是说,在第 3 阶段,舞者必须向后退 3 步 (-2 - 1)。
在第 3 阶段,舞者在位置 -4。
stage(n) = stage(n-1) - stage(n-2)
pos(n) = pos(n-1) + stage(n)
At stage 4, the dancer is at position -5.
#!/usr/bin/python
if __name__=="__main__":
s = [0, 1, -2]
p = [0, 1, -1]
for n in range(3, 5):
diff = s[n - 1] - s[n - 2]
s.append(diff)
p.append(p[n - 1] + diff)
print "Position at stage %s is %s" %(n, p[len(p) - 1])
我的问题是假设我们有超过 1000 万个阶段。列表 p 和 s 会增长并可能导致内存问题。有没有办法解决这个问题。除了使用列表,我找不到其他解决方案。
如果我删除第一个元素 s.pop() p.pop()
它是一个索引超出范围异常。这是正常的。除此之外,我不知道该从哪里继续。
比我想象的要简单。
#!/usr/bin/python
if __name__=="__main__":
last_move = -2
penultimate_move = 1
previous_position = -1
for n in range(3, 5):
#compute current move and position
current_move = last_move - penultimate_move
current_position = previous_position + current_move
#do switch in here
penultimate_move = last_move
last_move = current_move
previous_position = current_position
print "current position %s" %current_position
最佳答案
对此有一个简单的解决方案:在第 6、7 和 8 阶段,位置恰好分别为 0、1 和 -1,与初始位置相同。由于下一个阶段和位置仅取决于前一对阶段和前一个位置,因此可以保证重复相同的序列。
因此计算给定 n 位置的函数可以是:
def position(n):
return [0, 1, -1, -4, -5, -3][n % 6]
以及计算阶段数n的函数:
def stage(n):
return [3, 1, -2, -3, -1, 2][n % 6]
关于python - 递归算法 : find position after n moves,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41292387/
C++ 中的标准“映射”容器允许您插入右值: T x; std::map m; // m[1]; // populate "1" auto it = m.insert(std::make_pair(
我们知道 std::move does not actually move anything .它只是将左值引用 (&) 转换为右值引用 (&&)。 那么在下面的例子中,拷贝构造函数是如何被调用的呢?
http://en.cppreference.com/w/cpp/language/rule_of_three 几个月前我开始使用 c++11并观看了五人规则。 所以..我开始将复制构造函数/复制赋值
这个问题在这里已经有了答案: In what scenarios should I expect to explicitly need to implement a move constructor
我有一个类似于下面的对象,我正在尝试为它实现一个 move 构造函数,这样你就可以为 std::vector 插入一个. struct Mesh { std::vector vPoint
这个问题在这里已经有了答案: How to create an std::function from a move-capturing lambda expression? (3 个回答) 关闭7年前
我有一个源文件,我正在使用它 move 到一个存档目录 关闭。 move (srcfile,dstdir) 但是当存档目标目录中已经存在相同的文件时,它会抛出一个错误,指出无法 move 文件已经存在
这应该有效,但无效并给出以下错误(如下)。 我读过几篇关于 stackoverflow 的帖子 here和 here但在这种情况下似乎没有一个好的答案。我真的希望我只是错过了一些愚蠢的东西,我已经在这
我似乎无法弄清楚为什么会这样。当我运行以下代码时: $uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}";
我似乎无法弄清楚为什么会这样。当我运行以下代码时: $uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}";
我的表格行可以上下 move ,但我的问题是数据表行取代了表格标题(第一行)。 我想要一个固定的第一行,这样当您单击向上箭头时,您就不会向上 move 该行来替换标题。 我尝试了一些条件逻辑来检查当前
正如我在Move constructor/operator=中询问的那样,过了一段时间,我同意并接受了这个问题的正确答案,我只是在想,是否有类似“移动析构函数” 这样的东西会在每次移动的对象上调用会有
如果我有一个像这样的 C 类: class C { std::string s; public: C(std::string& s) : s(s) {} C(std::str
我是 C++11 的新手,发现 move 语义和复制省略非常适合编写优雅高效的代码。不过我有一些问题想请教。这里我写了一个模板类 matrix.hpp 并用它来测试 move 语义的行为。 #incl
我在我们的项目中遇到了这样的代码: class A { public: A(A&& obj): valid_(false), data_(obj.data_) {} //... void
move 语义在这个例子中是如何工作的: struct test { int ii[10]; int i; }; test f() { test a; std::cou
假设我有一个类型为 A 的对象 a。 如果我想将其 move 到函数foo(A)。 一个选择是执行 foo(std::move(a)),这将调用 move 构造函数。 但是,假设我正在使用一个我无法控
我用 move 复制构造函数和 move 复制赋值运算符创建了一个简单的应用程序,并且在它们中的每一个上我都做了一个 cout 语句来告诉我,它们正在执行。但是在执行过程中,我没有看到 move 复制
相关问题: Why this move constructor is not called wtih rvalue temporary? [duplicate] Move Constructor vs
我正在努力研究 move 构造函数,并希望通过这个问题获得更多见解。这是一个简单的类。 class A { private: vector Bs; public: /* ..
我是一名优秀的程序员,十分优秀!