HackerRank刷题之路之---Algorithm(基于Python2)(持续更新)

Lisa's Workbook:

 此题整体不难,只是在代码实现的时候易错,需要搞清楚好几层逻辑关系。

有一本书,有n个章节,每个章节有一定数量的题目,每一章的题目从1开始索引,每一页上最多有k道题目,仅在某一章节结束的时候开启新的一页,页码从1开始,统计题目的索引数与页码数相同的题目的个数。

Python2代码如下:

n,k = map(int,raw_input().split())
arr = map(int,raw_input().split())
one_p,special,i = [0]*3
p,c = [1]*2
while True:
    i += 1
    one_p += 1
    if i == p: special += 1
    if i == arr[n-1] and c == n: break
    if i == arr[c-1]:
        c += 1
        i = 0
        one_p = 0
        p += 1
    if one_p == k:
        one_p = 0
        p += 1
print special

 从此题目中获得启示,在有多重逻辑判定的时候,需要提前想好逻辑判断的先后顺序,一般是由大到小逐个判断,同时要搞清楚每一次判定成功后,需要改变的量是哪些。此题中先判断全书是否结束,然后是章节是否结束,最后判断本页是否结束。

 

 Find Digits:

将一个整数的每一位数字取出来,然后统计这里面有几个可以整除这个整数。记录这个题目主要是记录一个小技巧,此题本身很简单,但是用Python可以更简洁:

for i in xrange(input()):
    s = raw_input().strip()
    print sum([1 if int(s)%x == 0 else 0 for x in [x for x in map(int,s) if x > 0]])

真正起作用的代码其实只有一行~这就是列表解析的强大之处。

 

posted @ 2016-10-18 10:29  AI小虾米  阅读(1059)  评论(0编辑  收藏  举报