【20190801】【校招笔试题】俄罗斯方块_网易

问题描述

链接:https://www.nowcoder.com/questionTerminal/9407e24a70b04fedba4ab3bd3ae29704?answerType=1&f=discussion

小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。
荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。

有一天,小易又开了一局游戏,当玩到第 m 个方块落下时他觉得太无聊就关掉了,小易希望你告诉他这局游戏他获得的分数。

输入描述:

第一行两个数 n, m。第二行 m 个数,c1, c2, ... , cm , ci 表示第 i 个方块落在第几列

其中 1 <= n, m <= 1000, 1 <= ci <= n

输出描述:

小易这局游戏获得的分数

示例:


思路及解答

我的想法:如下图。n 是游戏中的列数,那么可以设立 n 个队列(因为是先入先出),数字为 1 则入第 1 个队列,数字为 i 则入第 i 个队列……,若所有队列都不为空时,则弹出全部队列的一个元素,并且分值加 1 , 直到 m 个元素分配完,看分值是几。(此方法很麻烦!舍弃)

# 计算各元素的个数,其中取最小值,就是该人的分数。
# 用了哈希表来计算元素个数。注意:哈希表只是把现有的元素存进去,并计算个数,但如果有元素没出现,那么一定就是 0 分。 
import sys
n, m = map(int, sys.stdin.readline().strip().split())
nums = sys.stdin.readline().strip().split()
nums = [int(i) for i in nums]
hashmap = {}
for i in range(m):
    if nums[i] not in hashmap.keys():
        hashmap[nums[i]] = 1
    else:
        hashmap[nums[i]] += 1
if len(hashmap) == n:    # 此次判断条件是防止结果预计为 0 的情况,但 hashmap.values() 里面不存在 0 元素,所以会出错。
    print(min(hashmap.values()))
else: 
    print(0)

知识点

1. 笔试题中输入、输出那些事

(1) 单行多个输入:

import sys
for line in sys.stdin:
    a = line.split()
    # a = [int(tmp) for tmp in a]

# 假如输入: 2 3 4,那么输出 ['2', '3', '4']
# 如果是多个元素,那么不能用 int() 来变成整数,也不能用 map(int, ...) 来变成整数,需要用 nums = [int(tmp) for tmp in nums] 通过 for 循环一个一个元素的变。

(2) 多行多个输入:

import sys

# 读取第一行的元素 n
n = int(sys.stdin.readline().strip())   # 单个元素直接用 int() 变换

# 获取第二行的两个元素 x, y
x, y = map(int, sys.stdin.readline().strip().split())  # 两个元素用 map(int, ...)变换

# 读取下面 m 行元素
for i in range(m):
    nums = sys.stdin.readline().strip().split()   # 多个元素用 for 循环一个一个变换
    nums = [int(tmp) for tmp in nums]

2. Python 中 str.strip() 的用法

用法:删除字符串的头、尾指定的元素,默认为空格或换行。

注意:只能删除头和尾的元素,中间元素不可以!

(参考:Python strip()方法

3. list 中int 型和 str 型的相互转换

# 第一种:使用 map() 函数

1. str --> int 
    results = ['1','2','3']
    results = list(map(int, results))

2. int --> str
    results = [1,2,3]
    results = list(map(str, results))


# 第二种:使用 for 循环

1. str --> int
    results = ['1','2','3']
    results = [int(i) for i in results]

2. int --> str 
    results = [1,2,3] 
    results = [str(i) for i in results]

(参考:python int型list和str型list互转

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Satisfying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值