深信服笔试算法题0914
1.矿泉水
import math x,a,b=5000,5,100 per_a=a/500 # 求单价 per_b=b/1500 # 求单价 ans=0 if per_a<=per_b: # 小瓶单价便宜,全买小瓶 ans=int(math.ceil(x/500)*a) else: # 大瓶单价便宜 ans=(x//1500)*b # 先买够整数瓶 res=x%1500 ans+=min(math.ceil(res/500)*a,b) # 比较剩余部分,大瓶和小瓶哪个更划算 print(ans)
2.立方和
# 打表,先把立方能表示的都算出来 # 数据范围1,000,000,000,所以到1000就可以 num=int(input()) a=set() for i in range(1,1000): for j in range(i,1000): a.add(pow(i,3)+pow(j,3)) if num in a: print('Yes') else: print('No')
3.求环的个数
def change(nums): n=len(nums) cycles=0 total=set() for i in range(1,n+1): if i not in total: a=set() while(i not in a): # 判定环 total.add(i) a.add(i) i=nums[i-1] cycles+=1 return cycles ans=change(nums) if ans==1: # 说明只有一个环,不需要修改元素 print(0) else: # 多于一个环,有几个环就修改几个元素 print(ans)