1. 数据最节约的备份方法
题目描述:
有若干个文件,使用刻录光盘的方式进行备份,假设每张光盘的容量是500MB,求
使用光盘最少的文件分布方式
所有文件的大小都是整数的MB,且不超过500MB;文件不能分割、分卷打包
输入描述:
一组文件大小的数据
输出描述:
使用光盘的数量
补充说明:
不用考虑输入数据不合法的情况;假设最多100个输入文件。
示例1
输入:100,500,300,200,400
输出:3
说明:(100,400),(200,300),(500) 3张光盘即可
示例代码:
# 测试数据
test_data = [100,500,300,200,400]
def fun(s):
# 统计个数
count = 0
# 移动游标
while cur < len(s):
if s[cur] < 500 and (500 - s[cur] in s):
for index,value in enumerate(s):
if value == 500 - s[cur]:
# 使用过的数据标记为 -1
s[index] = -1
s[cur] = -1
# 计数
count += 1
elif s[cur] == 500:
s[cur] = -1
count += 1
cur += 1
# 统计最终结果
count = count + (len(s) - s.count(-1))
return count
r = fun(test_data)
print(r)
2. TLV解码
示例代码
# 测试数据
s = '31'
ss = [
'32', '01', '00', 'AE',
'90', '02', '00', '01', '02',
'30', '03', '00', 'AB', '32', '31',
'31', '02', '00', '32', '33',
'33', '01', '00', 'CC'
]
def fun(s,ss):
cur = 0
# 结果列表
res = []
while cur < len(ss):
Tag = ss[cur]
length_str = ss[cur + 2] + ss[cur + 1]
length = int(length_str,10)
if Tag == s:
tmp = cur + 2
for i in range(length):
res.append(ss[tmp + i + 1])
break
cur += length + 2 + 1
return ''.join(res)
r = fun(s,ss)
print(r)