我正在创建一个程序,该程序在 python 3.3 上创建 othello 或 reversi 的控制台版本。我正在创建需要用户输入 4-16 之间的偶数行号和 4-16 之间的偶数列号的电路板。如何创建一个函数或算法来确定用户定义的网格上的四个平方数,将最初的四块放在棋盘的中间?谢谢!
问问题
488 次
1 回答
0
假设行数和列数是 和 的值,rows
则要cols
使用的行数是rows/2-1
和 rows/2
。(例如,如果rows==12
值为 5 和 6。)类似地,要使用的列号是cols/2-1
和 cols/2
。
请注意,如果板表示为线性数组,并且如果一行的单元格相邻存储,则可以说lr =(rows+1)*cols//2
,并将单元格 'lr'、 、 和 初始化lr-1
为lr-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 回答