能组成三角形的三元组问题,python实现

今天笔试腾讯的技术岗位的数据分析,有个三元组问题

三元组定义:

能组成三角形的三元组,如(3,4,5),但(3,,5,4)又是一个不同的三元组,

输入要求:

输入3个数为,n,m,p,要求1<=n<100000,1<=m<100000,1<=p<100000,在输入的数以内,有多少个组合三元组,输出其个数,不满足输出为-1

例:

输入: 2 3 3 (中间空格隔开)

输出 :9

拿例子分析:n,m,p对应能取到的分别为 1,2\1,2\1,2,3,不同的组合方式有:

[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1], [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2], [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3]  ,解决的问题即在这么多个组合中有哪些组合能组成三角形,并统计个数。

扫描二维码关注公众号,回复: 3326493 查看本文章

解决的问题:1 满足三角形的定义

                      2 计算出组合的情况

三角形的定义即两边之和大于第三边,对于任何一个3元素判断,既有:

def is_sanyuan(alist):
    if alist[0] + alist[1] > alist[2] and alist[0] + alist[2] > alist[1] and alist[1] + alist[2] > alist[0]:
        return True
    else:
        return False

组合来说,可以写三个循环来表示所有的情况。从n,m,p来看,满足的条件始终是 1<n,m,p<100000的,循环的起始为1,终止为n,m,p,tmp是所有堆积的元素,将其拆分为二维列表,用变量n表示

def get_all_example(res):
    tmp = []
    n = []
    for i in range(1,res[0]+1):
        for j in range(1,res[1]+1):
            for k in range(1,res[2]+1):
                tmp.append(i)
                tmp.append(j)
                tmp.append(k)
    for l in range(0,len(tmp),3):
        n.append(tmp[l:l+3])
    return n

比较每个组合,判断是否为三元组并且计数,得到结果

count = 0
    for i in example:
        if is_sanyuan(i):
            count += 1

所有python3代码

def is_sanyuan(alist):
    if alist[0] + alist[1] > alist[2] and alist[0] + alist[2] > alist[1] and alist[1] + alist[2] > alist[0]:
        return True
    else:
        return False

def get_all_example(res):
    tmp = []
    n = []
    for i in range(1,res[0]+1):
        for j in range(1,res[1]+1):
            for k in range(1,res[2]+1):
                tmp.append(i)
                tmp.append(j)
                tmp.append(k)
    for l in range(0,len(tmp),3):
        n.append(tmp[l:l+3])
    return n

if __name__ == '__main__':
    res = [int(i) for i in input().split(' ')]
    example = get_all_example(res)
    count = 0
    for i in example:
        if is_sanyuan(i):
            count += 1
    if count == 0:
        print(-1)
    print(count)

由于时间的问题,后来才做出来的,并没有测试如有问题或者错误请指正。

猜你喜欢

转载自blog.csdn.net/weixin_39631030/article/details/82726203