这是我要写的程序:
用户给出了一些domino块的属性,其中一些是垂直的,一些是水平的,它们在n行和m列中假设我们从上面看:一个水平多米诺骨牌可以落在右边或左边,并且只能使其他水平多米诺骨牌落下。而一个垂直多米诺骨牌可以上下倒下,只能导致其他垂直多米诺骨牌倒下。
首先,用户将以“n m”的形式给出行数和列数,在接下来的n行输入中,用户将给出每行由m个字符组成的行,例如m=5:| |-|-|-“|”表示水平,而“-”表示垂直的多米诺骨牌。
现在这个程序应该确定多米诺骨牌的最小数量,我们必须推动它们全部倒下。
这是问题中的示例:
输入:
3 3
|||
||-
||-
输出:
4
我们把每排第一张多米诺骨牌和第三列第二张多米诺骨牌(从左到右)
这是我的代码:
dim = input()
n, m = [int(i) for i in dim.split(' ')]
min_d = 0
vertical = []
for q in range(0, m):
vertical.append(n)
for j in range(0, n):
line = list(input())
# horizontal:
if line[0] == '|':
min_d += 1
for l in range(1, m):
if line[l] == '|':
if line[l-1] == '-':
min_d += 1
# vertical:
if j == 0:
for k in range(0, m):
if line[k] == '-':
min_d += 1
vertical[k] = 0
if j > 0:
for p in range(0, m):
if line[p] == '-':
if vertical[p] != j-1:
min_d += 1
vertical[p] = j
print(min_d)
对于上面的例子和其他一些我手工制作和计算的例子来说,它工作得很好但当我在网站上提交这篇文章时,我得到了“错误的答案!”为了所有的测试!这是怎么回事?
最佳答案
因此,这听起来更像是一个问题,需要找出问题所在,而不是代码,因为假设每个domino只能知道紧挨着它们的那些domino,并且面向同一个方向并不特别困难。有没有可能这个问题实际上更复杂,在两个面相相似的多米诺骨牌之间撞倒一个多米诺骨牌可以让多米诺骨牌相互撞击?
例如:
3 3
|-|
可能有输出
2
因为,首先敲打中间的多米诺骨牌可以将左边的多米诺骨牌敲打到右边的多米诺骨牌。