小红得到了一个阵法。 她想取一些数字使数字之和尽可能大,但要求和必须是k的倍数。 你能帮帮她吗?
小红取数 时间限制:1秒 空间限制:256M 描述 小红拿到了一个数组,她想取一些数使得取的数之和尽可能大,但要求这个和必须是 k 的倍数。 你能帮帮她吗? 输入描述: 第一行输入两个正整数 n 和 k 第二行输入 n 个正整数 ai 1≤n,k≤10**3 1 ≤ ai ≤ 1 0 **10 输出描述: 如果没有合法方案,输出 - 1。 否则输出最大的和。
我写的比较简单和直观的 代码如下:
while True:
n,k=map(int,input().strip().split(' '))
if n >= 1 and n <= 10**3 and k >= 1 and k <= 10**10:
break
else:
print('n或k输入超过范围1≤n,k≤10**3,1 ≤ ai ≤ 1 0 **10')
# arr = [int(input()) for _ in range(n)]
arr=[13,14,17,1,2]#list(map(int,input().split(' ')))
# arr=list(map(int,input().strip().split(' ')))
while True:
arr=list(map(int,input().strip().split(' ')))
if n == len(arr):
break
else:
print('输入{}个数:'.format(n))
# print(n,k,arr)
'''求数组的所有子集res'''
res=[[]]
for i in arr:
# print('i=',i)
for j in res[:]:
# print('j,x==',j)
x=j[:]
x.append(i)
# print('x==', x)
res.append(x)
# print('res===',res)
print(res)
'''求各子集元素和的最大值,并降序排列'''
res1={}
for i in range(len(res)):
res1[i]=sum(res[i])
res1=dict(sorted(res1.items(), key=lambda x: x[1], reverse=True))
print(res1)
'''取能够被K整除的最大值'''
result=-1
for i in res1:
if res1[i]%k==0 and res1[i]!=0:
result=res1[i]
print(i,res1[i],res[i])
break
print(result)