• 拼多多2018校招编程题汇总 Python实现


    题目原址

    列表补全

    在商城的某个位置有一个商品列表,该列表是由L1、L2两个子列表拼接而成。当用户浏览并翻页时,需要从列表L1、L2中获取商品进行展示。展示规则如下:

    1. 用户可以进行多次翻页,用offset表示用户在之前页面已经浏览的商品数量,比如offset为4,表示用户已经看了4个商品
    2. n表示当前页面需要展示的商品数量
    3. 展示商品时首先使用列表L1,如果列表L1长度不够,再从列表L2中选取商品
    4. 从列表L2中补全商品时,也可能存在数量不足的情况
      请根据上述规则,计算列表L1和L2中哪些商品在当前页面被展示了

    输入描述:
    每个测试输入包含1个测试用例,包含四个整数,分别表示偏移量offset、元素数量n,列表L1的长度l1,列表L2的长度l2。

    输出描述:
    在一行内输出四个整数分别表示L1和L2的区间start1,end1,start2,end2,每个数字之间有一个空格。
    注意,区间段使用半开半闭区间表示,即包含起点,不包含终点。如果某个列表的区间为空,使用[0, 0)表示,如果某个列表被跳过,使用[len, len)表示,len表示列表的长度。

    输入例子1:

    2 4 4 4
    1 2 4 4
    4 1 3 3

    输出例子1:

    2 4 0 2
    1 3 0 0
    3 3 1 2

    import sys
    s1=e1=s2=e2=0
    for line in sys.stdin:
        offset,n,l1,l2=map(int,line.split())
        if offset<=l1:
            if offset+n<=l1:
                s1,e1,s2,e2=offset,offset+n,0,0
            elif offset+n>l1 and offset+n<=l1+l2:
                s1,e1,s2,e2=offset,l1,0,offset+n-l1
            else:
                s1,e1,s2,e2=offset,l1,0,l2
        elif offset>l1 and offset<=l1+l2:
            if offset+n<=l1+l2:
                s1,e1,s2,e2=l1,l1,offset-l1,offset+n-l1
            else:
                s1,e1,s2,e2=l1,l1,offset-l1,l2
        else:
            s1,e1,s2,e2=l1,l1,l2,l2
        print(s1,e1,s2,e2)
    
    

    数三角形

    给出平面上的n个点,现在需要你求出,在这n个点里选3个点能构成一个三角形的方案有几种。

    输入描述:

    第一行包含一个正整数n,表示平面上有n个点(n <= 100)
    第2行到第n + 1行,每行有两个整数,表示这个点的x坐标和y坐标。(所有坐标的绝对值小于等于100,且保证所有坐标不同)

    输出描述:

    输出一个数,表示能构成三角形的方案数。

    输入例子1:

    4
    0 0
    0 1
    1 0
    1 1

    输出例子1:

    4

    例子说明1:

    4个点中任意选择3个都能构成三角形

    import sys
    n = int(sys.stdin.readline())
    dot=[]
    cnt=0
    for i in sys.stdin:
        dot.append(tuple(map(int,i.split())))
    for i in range(0,n-2):
        for j in range(i+1,n-1):
            for k in range(j+1,n):
                if((dot[j][1]-dot[i][1])*(dot[k][0]-dot[i][0])!=(dot[j][0]-dot[i][0])*(dot[k][1]-dot[i][1])):
                    cnt+=1
    print(cnt)
    

    最大乘积

    给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
    输入描述:
    第一行是数组大小n,第二行是无序整数数组A[n]

    输出描述:

    满足条件的最大乘积

    输入例子1:

    4
    3 4 1 2

    输出例子1:

    24

    
    import sys
    n = int(sys.stdin.readline())
    l=list(map(int,sys.stdin.readline().split()))
    max1=0
    max2=0
    max3=0
    min1=0
    min2=0
    for i in l:
        if i is 0:
            continue
        elif i >0:
            if i>max3:
                max3,i=i,max3
            if max3>max2:
                max2,max3=max3,max2
            if max2>max1:
                max1,max2=max2,max1
        else:
            if i<min2:
                min2,i=i,min2
            if min2<min1:
                min1,min2=min2,min1
    print(max1*max(max2*max3,min1*min2))
    
    

    小熊吃糖

    有n只小熊,他们有着各不相同的战斗力。每次他们吃糖时,会按照战斗力来排,战斗力高的小熊拥有优先选择权。前面的小熊吃饱了,后面的小熊才能吃。每只小熊有一个饥饿值,每次进食的时候,小熊们会选择最大的能填饱自己当前饥饿值的那颗糖来吃,可能吃完没饱会重复上述过程,但不会选择吃撑。
    现在给出n只小熊的战斗力和饥饿值,并且给出m颗糖能填饱的饥饿值。
    求所有小熊进食完之后,每只小熊剩余的饥饿值。

    输入描述:

    第一行两个正整数n和m,分别表示小熊数量和糖的数量。(n <= 10, m <= 100)
    第二行m个正整数,每个表示着颗糖能填充的饥饿值。
    接下来的n行,每行2个正整数,分别代表每只小熊的战斗力和当前饥饿值。
    题目中所有输入的数值小于等于100。

    输出描述:

    输出n行,每行一个整数,代表每只小熊剩余的饥饿值。

    输入例子1:

    2 5
    5 6 10 20 30
    4 34
    3 35

    输出例子1:

    4
    0

    例子说明1:

    第一只小熊吃了第5颗糖
    第二只小熊吃了第4颗糖
    第二只小熊吃了第3颗糖
    第二只小熊吃了第1颗糖

    import sys
    n,m = map(int,sys.stdin.readline().split())
    candy=list(map(int,sys.stdin.readline().split()))
    candy.sort(reverse=True)
    hungry={}
    pst=[]
    for i in sys.stdin:
        a,b=map(int,i.strip().split())
        hungry[a]=b
        pst.append(a)
    delIndex=[]
    for i in range(1,101)[::-1]:
        if i not in hungry:
            continue
        else:
            for j in range(len(candy)):
                if hungry[i]<=0:
                    break
                else:
                    if candy[j]>hungry[i] or j in delIndex:
                        continue
                    else:
                        hungry[i]-=candy[j]
                        delIndex.append(j)
                        
    for i in pst:
        print(hungry[i])
    

    大整数相乘

    有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
    输入描述:
    空格分隔的两个字符串,代表输入的两个大整数

    输出描述:
    输入的乘积,用字符串表示

    输入例子1:
    72106547548473106236 982161082972751393

    输出例子1:
    70820244829634538040848656466105986748

    import sys
    numStr1,numStr2=sys.stdin.readline().split()
    num1,num2=int(numStr1),int(numStr2)
    sum=0
    pos=1
    for i in numStr2[::-1]:
        sum+=num1*int(i)*pos
        pos*=10
    print(sum)
    
  • 相关阅读:
    用python一键爬取几千张表情包斗图,分分钟征服朋友圈所有好友
    Python新手必备的15个字符串方法,你学废了吗?
    价值10K+的Python面试题,珍藏已久,分享给大家!
    用python开发一个益智游戏,没事就锻炼锻炼自己的方向感
    室友吃个泡面的时间,我就用Python代码下载了几千张手机壁纸,简直yyds!
    Python GUI编程:tkinter 关于 ttkbootstrap 的使用
    .NET 6 使用 System.Drawing.Common 出现 The type initializer for ‘Gdip’ threw an exception 异常的解决办法
    如何在 Linux 上使用 NPOI
    Silverlight企业应用快速开发平台框架设计(二)分析平台实现重点是什么,要怎么做?
    Silverlight企业应用快速开发平台框架设计(一)目标
  • 原文地址:https://www.cnblogs.com/DianeSoHungry/p/8214343.html
Copyright © 2020-2023  润新知