首页 > 试题广场 >

数字游戏

[编程题]数字游戏
  • 热度指数:21290 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和的数字中的最小数(从1开始)。

输入描述:
输入第一行为数字个数n (n ≤ 20)
第二行为n个数xi (1 ≤ xi ≤ 100000)


输出描述:
输出最小不能由n个数选取求和组成的数
示例1

输入

3
5 1 2

输出

4
按照一楼大佬思路给了一个python解:
n = int(input())
list_x = list(map(lambda x: int(x), input().split()))
list_x = sorted(list_x)
miss_num = 0
for i in list_x:
    if i > miss_num + 1:
        break
    else:
        miss_num += i
print(miss_num + 1)
发表于 2018-12-25 14:47:19 回复(0)
while True:
    try:
        num,digitList = int(input()),list(map(int,input().split()))
        digitList.sort()
        pieceNum = 0             #表示此前已经可以拼凑前pieceNum的数了
        for i in digitList:
            if pieceNum+1 >= i:   #如果当前i比pieceNum+1还要大,则这些数凑不出pieceNum+1
                pieceNum += i     #此时能凑的最大数为pieceNum+i
            else:
                print(pieceNum+1)
                break
        else:
            print(pieceNum+1)
    except Exception:
        break
编辑于 2018-09-24 00:05:50 回复(0)
n = int(input().strip())
seq = list(map(int,input().strip().split()))
seq.sort()
max_num = 0
for num in seq[:]:
    if num <= max_num+1:
        max_num = max_num + num
    else:
        print(max_num+1)
        break
else:
    print(max_num+1)
发表于 2018-09-05 19:41:11 回复(0)
n=int(input())
a=list(map(int,input().split()))
a.sort()
miss=0
for i in range(len(a)):
    if a[i]>miss+1:
        break
    miss+=a[i]
print(miss+1)#参考第一位的

发表于 2018-06-06 10:00:59 回复(0)
n=int(input())
x=list(map(int,input().split()))
x.sort()#排序
sums=0#初始的和为0
for i in range(0,n):
    if (sums+1)<x[i]:#如果前几个数的和加1小于当前值 ,则说明有空的间隔的值,停止循环,否则继续进行和计算
        break
    else:
        sums+=x[i]
ans=sums + 1
print(ans)


编辑于 2018-05-31 13:00:53 回复(0)