4.9腾讯常规批第二次笔试

只记得编程题了,前面还有25题不定项选择

编程1

给你一个从1到n的序列,你需要一直执行n次操作。每次操作先计算序列里剩余数字的最大公因数,把这个数字放入另一个序列中,再从原序列选择一个数字删除。
你要以怎样的顺序删除这个序列里的数字,才能使得到的另一个序列里的n个最大公因数字典序最大?

输入描述:
一个数字n 1<=n<=1000000
输出描述:
n个数字,最大的公因数字典序

实例1
input
3
output
1 1 3
说明:把1,2,3的最大公因数1输出,删除1;把2,3的最大公因数1输出,删除2;把3的最大公因数输出,删除3.
输出结果1 1 3

实例2
input
2
output
1 1 2 4

编程2

小Q发现了一种特殊的数组,叫做自增数组。这个数组支持一种操作:每次操作可以把数组中的一个数自增1.
现在有一个长度为n的自增数组,小Q现在想利用这个操作把数组中的每个数变得不一样,英文最少需要多少次操作?

输入描述:
第一行,一个整数n(n<=10000)
第二行,n个空格间隔的整数,即数组中的元素ai(-10000<=ai<10000)

input
5
1 2 3 2 5
output
2

python3.5.2代码

n = int(input())
num = map(int,input().split())
num = list(num)
num.sort()
num1 = num.copy()

def count(num):
    n = len(num)
    re = dict()
    for i in range(n-1):
        if num[i] == num[i+1]:
            re[i+1] = num[i+1]
    return re

re = count(num)

for key,value in re.items():
    val = value + 1
    while val in num:
        val += 1
    num[key] = val
sum = 0
for i in range(n):
    sum = sum + (num[i]-num1[i])
print(sum)

效率如何不知道。。。。

编程3

小Q的好朋友牛牛在纸上写了长度为n的正整数数列。牛牛要求小Q每次从数列中选取两个数a,b,把这两个数从数列中移除出去,然后再数列中加入a*b+1,直到只剩一个数为止。
小Q发现根据操作顺序的不同,最后得到的数的大小也不一样。小Q现在想让你帮他计算,在所有情况中能获得的最大值减去能获得的最小值等于多少?

输入描述:
第一行,一个正整数n,(1<=n<=50),表示正整数序列的长度;
在接下来的n行中,每行输入一个整数ai,即初始数列中的的每一个数。保证所有数据计算结果均在64位有符号整数范围之内。

输出描述:
输出一个数,表示最大最小之差。

实例1
input
3
1
2
3
output
2

你可能感兴趣的:(数据挖掘)