迅雷2018算法工程师-编程题-python

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010420283/article/details/82661907

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

猜你喜欢

转载自blog.csdn.net/u010420283/article/details/82661907