數字遊戲問題(迭代java)__迭代

來源:互聯網
上載者:User

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);        }    }}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.