数字游戏问题(迭代java)
来源:互联网 发布:淘宝上传图片模糊 编辑:程序博客网 时间:2024/06/02 00:15
1、牛客网原题:
题目描述
小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和的数字中的最小数。
输入描述:
输入第一行为数字个数n (n ≤ 20)第二行为n个数xi (1 ≤ xi ≤ 100000)
输出描述:
输出最小不能由n个数选取求和组成的数
示例1
输入
35 1 2
输出
4
2、题目分析:
2.1、自己一直有个误解,就是手续找出给出的数字序列中,能表示的最小值min,然后在找出:在这个数字后面的不能被数字序列通过组合的第一个最小的数字。但是题目的意思是:最小值min应该从1开始,然后依次递增,也就是查找正数范围内,最小的不能被表达的整数。
2.2、看了大家的评论,原来这个题目来源于code jam,这个google竞赛的一个网站,
给出原题网址:http://code.google.com/codejam/contest/4244486/dashboard#s=p2
原题解法:http://code.google.com/codejam/contest/4244486/dashboard#s=a&a=2
3、code实现:已a
package schooloffer17;import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;/** * Created by caoxiaohong on 17/11/6 11:33. * <数字游戏></数字游戏> * 小易邀请你玩一个数字游戏... */public class NumberGame { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n;//输入数字个数 while (scanner.hasNext()){ n=scanner.nextInt(); scanner.nextLine();//换行 ArrayList<Integer> numbers=new ArrayList<Integer>(); for(int i=0;i<n;i++) numbers.add(scanner.nextInt()); // 1 ≤ xi ≤ 100000 Collections.sort(numbers); //如果最小的数字都比1大,那么就不用进行下面的计算了,直接返回1即可.因为1就是最小的不能被表达的数字. if(numbers.get(0)>1) { System.out.println(1); continue; } /** * 迭代过程: * 1.min表示:numbers下标从0到i的数字进行组合,能表示的数字范围:[1,min]; * 2.新增加了数字numbers.get(i)后,要想 * [1,min]U[tmp]U[1+tmp,min+tmp]=[1,min+tmp],则要求:tmp<=min+1即可 * 3.例子: * */ int min=1; //min初始化为第一个元素的值 int tmp; for(int i=1;i<n;i++){ tmp=numbers.get(i); if(tmp>min+1) break; else{ min += tmp; } } System.out.println(min+1); } }}
阅读全文
0 0
- 数字游戏问题(迭代java)
- Java数字字符串中怎么迭代每个数字
- 游戏迭代分析
- Java猜数字游戏
- [Java]猜数字游戏
- java 猜数字游戏
- Java 猜数字游戏
- 数字游戏(java)
- java--猜数字游戏
- java数字游戏
- java 猜数字游戏
- java.猜数字游戏
- java 猜数字游戏
- java 数字游戏
- 猜数字游戏java
- java 猜数字游戏
- java猜数字游戏
- Java猜数字游戏
- Jzoj5456【NOIP2017提高A组冲刺11.6】奇怪的队列
- java实现多线程的三种方式(thread、runnable、callable)
- centos 下php mysql nginx vsftpd 正确安装配置
- XAMPP使用中碰到【Maximum execution time of 30 seconds exceeded】问题
- 改变对象的字符串提示
- 数字游戏问题(迭代java)
- Ubuntu 16.04屏幕分辨率无法修改的解决方法
- nmap介绍
- VtigerCRM收件箱邮件打开失败JSLBL_Failed_To_Open_Email
- PostgreSQL中character、character varing、text数据类型的区别
- 判断一个单链表中是否有环
- 二叉树的层次遍历
- java只使用try和finally不使用catch的原因和场景
- Android log.e(),log.d(),log.i()等的区别