0

我正在创建一个程序,该程序在 python 3.3 上创建 othello 或 reversi 的控制台版本。我正在创建需要用户输入 4-16 之间的偶数行号和 4-16 之间的偶数列号的电路板。如何创建一个函数或算法来确定用户定义的网格上的四个平方数,将最初的四块放在棋盘的中间?谢谢!

4

1 回答 1

0

假设行数和列数是 和 的值,rows则要cols使用的行数是rows/2-1rows/2。(例如,如果rows==12值为 5 和 6。)类似地,要使用的列号是cols/2-1cols/2

请注意,如果板表示为线性数组,并且如果一行的单元格相邻存储,则可以说lr =(rows+1)*cols//2,并将单元格 'lr'、 、 和 初始化lr-1lr-cols中心lr-cols-1单元格。这等价于上面的公式。例如:

for rows in (4,6,8):
    for cols in (4,6,8):
        lr = (rows+1)*cols//2
        r = rows//2
        c = cols//2
        print rows, cols, ':\t', r,c, '\t', lr-cols-1, '\t', lr-cols, '\t', lr-1, '\t', lr, '\t', r*cols+c

生产

4 4 :   2 2     5   6   9   10  10
4 6 :   2 3     8   9   14  15  15
4 8 :   2 4     11  12  19  20  20
6 4 :   3 2     9   10  13  14  14
6 6 :   3 3     14  15  20  21  21
6 8 :   3 4     19  20  27  28  28
8 4 :   4 2     13  14  17  18  18
8 6 :   4 3     20  21  26  27  27
8 8 :   4 4     27  28  35  36  36

也就是说,(4,6) 情况的下标是 (8, 9, 14, 15),而 (6,4) 情况的下标是 (9, 10, 13, 14)。

对于偶数,2 是一个精确的除数,所以我认为 / 的结果在 Python 2(整数除法截断)和 Python 3(它没有)中都是相同的。或者您可以使用//运算符来确保截断除法。

请注意,您可以通过类似 的表达式对其进行测试rows,如果其中一个为奇数则为 1,否则为 0。cols(rows|cols)&1

于 2013-03-05T03:14:46.050 回答