1. 程式人生 > >算法學習(四)

算法學習(四)

ket ets amp 出棧 使用 append {} elif 算法

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= )    

 

算法學習(四)