算法学习(四)

1.Bit Count(位计算)

说明:计算机中的所有值都以二进制系统表示。在这个简单的任务中,您要编写一个程序,该程序计算给定值中的非零位数。我们使用的是32位整数值,所以应该从0到32个非零位。

value             binary                count
  1   00000000000000000000000000000001      1
100   00000000000000000000000001100100      3
 -1   11111111111111111111111111111111     32

即把value转化为32位的二进制,并计算其中1的个数。

Input data 包含要处理数的个数.
第二行包含要被处理的数字,它们的范围在 -2 000 000 0002 000 000 000.
Answer 包含1的位数,用空格隔开。

input data:
3
1 100 -1

answer:
1 3 32

代码如下:

1 nums = [1, 100, -1]
2 
3 def num_of_one(num):
4     nbin = bin(num & 0xffffffff) # 转化为32位的二进制
5     return nbin.count('1') #计算1的位数
6 
7 for num in nums:
8     print(num_of_one(num), end=' ')
# 输出 1 3 32

 

2.Matching Brackets(匹配括号)

说明:我们得到的字符串包含4种类型的括弧 () 、正方形 [ ] 、大括号 {} 和角 < >。我们的目标是检查,是否括号的顺序是正确的。也就是说,任何一个开括号都应该在字符串的另一个地方有一个相同类型的结束括号,而括号对不应该重叠,尽管它们可以嵌套.

(a+[b*c] - {d/3}) -这里的方括号和大括号都嵌在圆形的括号里
(a+[b*c) - 17] -这里的方括号和圆的是重叠的,这是没有意义的

Input data 包含要被检查的数量。
每行一个测试用例。
Answer 返回1(如果括号的顺序是正确的),返回0(如果不正确),由空格分隔。

input data:
4
(a+[b*c]-{d/3})
(a + [b * c) - 17]
(((a * x) + [b] * y) + c
auf(zlo)men [gy<psy>] four{s}

answer:
1 0 0 1

代码如下:

 1 Arrays =['(a+[b*c]-{d/3})',
 2              '(a + [b * c) - 17]',
 3              '(((a * x) + [b] * y) + c',
 4             'auf(zlo)men [gy<psy>] four{s}']
 5 
 6 SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'}
 7 SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys()
 8 
 9 def check(s):
10     arr = []
11     for c in s:
12         if c in SYMBOLS_L:
13             # 左符号入栈
14             arr.append(c)
15         elif c in SYMBOLS_R:
16             # 右符号要么出栈,要么匹配失败
17             if arr and arr[-1] == SYMBOLS[c]:
18                 arr.pop() #弹出匹配合适的
19             else:
20                 return '0'
21     return not arr 
22 
23 
24 for i in range(len(Arrays)):
25     if check(Arrays[i]) is True:
26         print('1', end=' ')
27     else:
28         print('0', end=' ')    

 

posted @ 2017-08-15 19:09  ZT1994  阅读(300)  评论(0编辑  收藏  举报