我最近偶然发现了2048游戏。您可以通过在四个方向上任意移动相似的图块来合并它们,以制作“更大”的图块。每次移动后,新的图块都会出现在随机的空白位置,其值为2或4。当所有方框都已填满且没有可合并磁贴的移动,或者您创建的值为时,游戏终止2048。 第一,我需要遵循明确定义的策略才能达到目标。因此,我想到了为此编写程序。 我当前的算法: while (!game_over) { for each possible move: count_no_of_merges_for_2-tiles and 4-tiles choose the move with a large number of merges } 我做的是在任何时候,我会尽量与值合并瓷砖2和4,就是我努力2和4瓷砖,尽可能最小。如果以这种方式尝试,所有其他磁贴将自动合并,并且该策略看起来不错。 但是,当我实际使用此算法时,在游戏终止前我只能得到4000点。最高分数AFAIK略高于20,000点,这比我目前的分数还大。是否有比以上更好的算法?
我几乎需要编写一个程序来检查列表中是否有重复项,如果删除了重复项,则将其删除并返回一个新列表,其中包含未重复/删除的项。这就是我所拥有的,但老实说我不知道该怎么办。 def remove_duplicates(): t = ['a', 'b', 'c', 'd'] t2 = ['a', 'c', 'd'] for t in t2: t.append(t.remove()) return t
问题 如何找到算法的时间复杂度? 在发布SO问题之前我做了什么? 我经历了这个,这个和许多其他链接 但是,在任何地方我都无法找到关于如何计算时间复杂度的清晰直接的解释。 我知道什么 ? 说一个简单的代码如下: char h = 'y'; // This will be executed 1 time int abc = 0; // This will be executed 1 time 说一个像下面这样的循环: for (int i = 0; i < N; i++) { Console.Write('Hello World !'); } int i = 0; 这将仅执行一次。时间实际上是计算到的,i=0而不是声明的。 …