您的位置:首页 > 编程语言 > Python开发

腾讯2017秋招笔试编程题:游戏任务标记 [python]

2017-11-23 09:02 363 查看
'''

[编程题] 游戏任务标记

时间限制:1秒

空间限制:32768K

游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,

任务ID范围[1,1024]。请用32个unsigned int类型来记录着1024个任务是否已经完成。初始状态都是未完成。 

输入两个参数,都是任务ID,需要设置第一个ID的任务为已经完成;并检查第二个ID的任务是否已经完成。 

输出一个参数,如果第二个ID的任务已经完成输出1,如果未完成输出0。如果第一或第二个ID不在[1,1024]范围,则输出-1。 

输入描述:

输入包括一行,两个整数表示任务ID.

输出描述:

输出是否完成

输入例子1:

1024 1024

输出例子1:

1

'''

'''

解题思路:设置权重

  本题的难点使用32个unsigned int类型来记录着1024个任务是否已经完成,也就是说每一个无符号整型要可以代表32个任务是否完成。

  而无符号整型的范围是0~2^32-1。

  如果我们把1024个任务按顺序平均分成32个小组,每个小组就有32个任务。

  我们给每个小组内的32个任务按顺序赋予权值,权值的大小为 2^0,2^1...2^31。

  如果该小组内的第1,3,7个任务完成,其余任务没完成,则记录该组任务完成情况的无符号数为 2^0 + 2^2 + 2^6。

  按照这个思路是可以实现给定任务id来判断任务完成情况的,具体实现比较复杂,我这里不赘述,

  当然,如果只需完成这道题目,不必考虑地如此复杂,对上述思路进行适当简化就能做出来了。

'''

'''

代码运行结果:

答案正确:恭喜!您提交的程序通过了所有的测试用例

'''

id1, id2 = [int(each) for each in input().split()]

tasks = [0]*32
weights = [2**i for i in range(32)]
if id1 > 1024 or id2 > 1024:
print(-1)
else:
id1 -= 1
id1_remain = id1 % 32
id1_pos = id1 // 32
tasks[id1_pos] = weights[id1_remain]
id2 -= 1
id2_remain = id2 % 32
id2_pos = id2 // 32
if tasks[id2_pos] == weights[id2_remain]:
print(1)
else:
print(0)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息