algorithm - meetbill/op_practice_book GitHub Wiki
1 求值
1.1 最大公约数
两个正整数a和b(a>b),它们的最大公约数等于(b)和(a除以b的余数c)之间的最大公约数。
while b:
a,b=b,a%b
最后的a 就是最大公约数
1.2 最小公倍数
先用辗转相除法求出最大公约数,然后再利用(最小公倍数=两数乘积/最大公约数)求得最小公倍数。
def min(a, b):
c = a*b
while b: a,b = b, a%b
return c//a
1.3 中位数
def median(data):
data.sort()
half = len(data) // 2
return (data[half] + data[~half])/2
2 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
def getOneCount(num):
if num > 0:
b_num=bin(b_num)
count = b_num.count('1')
print(b_num)
return count
elif num < 0:
b_num = bin(~num)
count = 8 - b_num.count('1')
return count
else:
return 0
3 排序
3.1 冒泡排序
# 冒泡排序将小数字在上面
nums=[3,5,1,8,9]
def w_sort(nums):
# 冒泡的排序次数
for i in range(len(nums)-1):
# 每次冒泡时需要比较的次数
for j in range(len(nums)-i-1):
if nums[j] > nums[j+1]:
nums[j],nums[j+1] = nums[j+1] ,nums[j]
return nums
print w_sort(nums)
4 多线程
多线程输出数组中的内容
import threading
w=[1,2,3,4,5,6]
def wang():
global w_flag
while w_flag != len(w):
print w[w_flag]
w_flag = w_flag +1
if __name__ == "__main__":
global w_flag
w_flag=0
a=threading.Thread(target=wang)
a.start()
a1=threading.Thread(target=wang)
a1.start()
a2=threading.Thread(target=wang)
a2.start()