pythontip 网站的挑战python题目中有些很难和需要算法来解出.
9:给你两个正整数a和b, 输出它们的最大公约数。
解题思路:用辗转相除法
1 2 3 4 5 6 7
| if a < b: a, b = b, a while b: a, b = b, a % b print a
|
11:给你一个正整数列表 L, 如 L=[2,8,3,50], 输出L内所有数字的乘积末尾0的个数,如样例L的结果为2.(提示:不要直接相乘,数字很多,可能溢出)
思路: 利用每个数字包含2和5的个数来判断,存在一对2 * 5 就是一个0
1 2 3 4 5 6 7 8 9 10 11
| a, b = 0, 0 for i in L: j = i while i i /= 2 a += 1 while j j /= 5 b += 1 print min(a, b)
|
12:给你一个正整数列表 L, 如 L=[2,8,3,50], 判断列表内所有数字乘积的最后一个非零数字的奇偶性,奇数输出1,偶数输出0. 如样例输出应为0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| a, b = 0, 0 for i in L: j = i while i i /= 2 a += 1 while j j /= 5 b += 1 if a > b: print 0 else: print 1
|
13: 光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节。鄙人光棍几十载,光棍自有光棍的快乐。让我们勇敢面对光棍的身份吧,
现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出。
1 2 3 4 5
| count = 0 while a: count += a % 2 a /= 2 print count
|
20:信息加密
给你个小写英文字符串a和一个非负数b(0<=b<26), 将a中的每个小写字符替换成字母表中比它大b的字母。
这里将字母表的z和a相连,如果超过了z就回到了a。例如a=”cagy”,b=3, 则输出 fdjb
1 2 3 4 5 6 7 8
| out_string = '' for i in a: if ord(i) + b <= ord('z'): out_string += chr(ord(i)+b) else: out_string += chr(ord(i)+b-26) print out_string
|