- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在另一个网站上看到这个面试问题。
在奥赛罗游戏中,红色或黑色圆盘按照特定规则放置在 8x8 网格上。玩家选择自己的颜色,网格上拥有最多圆盘数的玩家获胜。
给定两个二维数组(一个代表红色,另一个代表黑色)表示磁盘的存在/不存在,以及以下规则:
例如对于下面的二维数组,点将是对角线元素(包括[0,0])和第一行元素(不包括[0,0])的最大值,或者对角线元素(不包括[0, 0])和水平元素(包括[0,0])。即 max(4+0, 3+2) = 5
1 1 1 1 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
根据最高分确定获胜者。
最佳答案
我有一个建议,尽管您可能会找到一个更简单的建议。
要计算玩家的分数,请分配一个 8X8 二维结构数组,其中包含以下字段:垂直、水平、对角线 1、对角线 2。
在算法执行结束时,这四个字段将保存“到目前为止”序列的大小 - 例如,如果此单元格中有圆盘,则单元格 (x,y) 的“垂直”字段将保存 1 ,并且在(x,y-1)处没有圆盘,如果在(x,y)和(x,y-1)处有圆盘但在(x,y-2)处没有圆盘则为2等。相同关于其他3个领域。您还需要一个 score 变量,以对所获得的分数求和。
现在你应该按升序逐行浏览这个数组,从 (0,0) 单元格开始 [(0,0),(0,1)....(0,7),(1 ,0)...] 并填充结构。在每个单元格中,您首先检查原始二维阵列的等效单元格中是否有圆盘。如果没有圆盘,你应该保留分数,并将当前单元格的结构的所有字段设置为0。如果有圆盘(假设当前单元格是(x,y)),你应该分配如下:
(x,y)->vertical = (x,y-1)->vertical,
(x,y)->horizontal = (x-1,y)->horizontal,
(x,y)->diagonal1 = (x-1,y-1)->diagonal1,
(x,y)->diagonal2 = (x+1,y-1)->diagonal2.
请注意,在每个点上,您需要的所有值都已计算完毕。如果超出范围(x-1 < 0 等),该值为 0。您还应该为每个分配 4 的字段增加 2 或为每个分配 5 或更多的字段增加 1(这将为每个长度为 n > 3 的序列提供 n-2 分)。
就是这样。在遍历所有 2D 数组后,得分计数器将保存玩家的得分。
复杂度为O(n^2),一点都不差(实际上你在复杂度上找不到更好的解决方案)。
关于algorithm - 如何找到修改后的黑白棋/黑白棋游戏的赢家?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154840/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!