迅雷2018算法工程师-编程题-python
程序员文章站
2024-03-16 14:08:58
...
1. 用x,y表示一个整数范围区间,现在输入一组这样的范围区间(用空格隔开),请输出这些区间的合并。
输入描述:
一行整数,多个区间用空格隔开。区间的逗号是英文字符。
输出描述:
合并后的区间,用过空格隔开,行末无空格
'''
1.首先按照x元素排序,把第一个区间存入res
2.从第二个开始遍历:
如果当前区间与res[-1]无重叠,直接将当前区间append到res
如果有重叠,将res[-1]的end值更新为max(res[-1]的end值,当前区间end值)
'''
ss = input().split()
ss = [i.split(',') for i in ss]
s=[]
for i in range(len(ss)):
s.append(list(map(int,ss[i])))
s.sort()
res = [s[0]]
for i in range(1,len(s[1:])+1):
if s[i][0]<=res[-1][1]:
res[-1][1] = max(s[i][1],res[-1][1])
else:
res.append(s[i])
res = [','.join([str(j) for j in i]) for i in res]
res = ' '.join(res)
print(res)
2. 输入一个有符号整数,输出该整数的反转值,如:
输入1:123456,输出1:654321;
输入2:-123456,输出2:-654321
# 先判断是否是负数,然后利用字符串反转。
a=input()
if a[0]=='-':
b = '-'+a[1:][::-1]
else:
b = a[::-1]
print(int(b))
3. 给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小于120
输入描述:
整数n和m
输出描述:
求和等于m的所有组合的个数。
输入例子1:
6 8
输出例子1:
4
超时,代码的复杂度有点高,通过率是60%。
# 递归,含n,与不含n
def getCount(n,m):
if n<1 or m<1:
return 0
sum=0
if m<n:
n=m
if m==n:
sum=sum+1
sum=sum+getCount(n-1,m)
sum=sum+getCount(n-1,m-n)
return sum
n,m=list(map(int,input().split()))
print(getCount(n,m))