爱死Python了 发表于 2020-3-23 14:25:32

[Python]小x放骨牌

题目描述:
小X喜欢下棋。
这天,小X对着一个长为N宽为M 的矩形棋盘发呆,突然想到棋盘上不仅可以放棋子, 还可以放多米诺骨牌。
每个骨牌都是一个长为2宽为1的矩形,当然可以任意旋转。小X想知道在骨牌两两不重叠的前提下,这个棋盘上最多能放多少个骨牌,希望你帮帮他。

输入:第一行包含用一个空格隔开的两个整数N,M。

输出:第一行包含一个整数,表示该棋盘上最多能放的骨牌个数。

样例:输入: 2 3 输出:3

数据范围
   对于30%的数据,N,M≤4。
   对于60%的数据,N,M≤1000。
   对于 100%的数据,1≤N,M≤40000。


我是一个初学者,这题的题意还看不懂所以只写了一行 a, b = input().split()
原题

wangka 发表于 2020-3-23 15:42:01

a除以2,b除以1,最后printa和b

wangka 发表于 2020-3-23 15:42:43

我一会发代码

March2615 发表于 2020-3-23 15:44:40

# 解题思路:分三种情况
# N(奇)M(偶)、N(奇)M(奇)、N(偶)M(偶)
# 只有N(奇)M(奇)不能摆满

def domino(m: int, n: int) -> int:
    if m % 2 != 0 and n % 2 != 0:# N(奇)M(奇)的情况
      min_number = min(m, n)
      num = abs(m - n) * min_number // 2
      num += pow((min_number-1), 2, 2) + min_number - 1
      return num
    else:
      return m * n // 2


a, b = eval(input('enter a and b:'))
print(domino(a, b))


重要的是先理解题意想好解题思路再写代码
有一个小问题就是输入是2,3而不是2 3

wangka 发表于 2020-3-23 15:51:50

temp = input ("length:")
a = 2
a = int(temp)/2
temp = input ("width:")
b = 1
b = int(temp)/1
c = a*b
print(c)

March2615 发表于 2020-3-23 16:23:14

wangka 发表于 2020-3-23 15:51


有几个地方是不是有点问题呢

1. 第二行和第五行的赋值是什么用的呢?
2. 第三行和第六行计算出来的是浮点型,是不是应该用地板除呢?
3. 按照你的代码,length=3,width=2时输出的c为2(用地板除的情况下),但是预期答案是3,是不是没考虑全面?

爱死Python了 发表于 2020-3-23 17:53:45

wangka 发表于 2020-3-23 15:42
a除以2,b除以1,最后printa和b

对了40%

爱死Python了 发表于 2020-3-23 18:18:17

我重新看了遍题目,只要用棋盘的面积除以骨牌的面积,大家都想的太多了{:10_277:}
代码:
a, b = input().split()
a = int(a)
b = int(b)
c = 2
d = 1
c = int(c)
d = int(d)
print(a * b // c * d)

爱死Python了 发表于 2020-3-23 18:19:16

March2615 发表于 2020-3-23 15:44
重要的是先理解题意想好解题思路再写代码
有一个小问题就是输入是2,3而不是2 3

这是正确的代码:
a, b = input().split()
a = int(a)
b = int(b)
c = 2
d = 1
c = int(c)
d = int(d)
print(a * b // c * d)

爱死Python了 发表于 2020-3-23 18:19:49

wangka 发表于 2020-3-23 15:51


这是正确的代码:
a, b = input().split()
a = int(a)
b = int(b)
c = 2
d = 1
c = int(c)
d = int(d)
print(a * b // c * d)

wangka 发表于 2020-3-24 13:20:08

跟我后面发的一样
页: [1]
查看完整版本: [Python]小x放骨牌