首页 > 试题广场 >

数字游戏

[编程题]数字游戏
  • 热度指数:21539 时间限制: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
//对于从小到到排序的数列arr,前k项之和为sum,则1~sum都可以用前k项表示(取其中的某几个相加)
//如果arr[k+1]<=sum+1 ,则 1~sum+arr[k+1] 可以用前 k+1 个数字表示
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});
var countLine = 1;
var tokens = [];
rl.on('line', function(line){
   tokens.push(line);
   if(countLine == 2){
       var n = parseInt(tokens[0]);
       var arr = tokens[1].split(' ').map(function(item){
           return parseInt(item);
       });
       var sum = 0;
       arr.sort(function(value1, value2){
           return value1 - value2;
       });
       for(var i=0; i<n; i++){
           if(arr[i]> sum+1)
               break;
           sum += arr[i]; //前i项和
       }
       console.log(sum+1);
   }else{
       countLine++;
   }
});

编辑于 2017-08-11 19:17:38 回复(0)