zoukankan      html  css  js  c++  java
  • 网易游戏2013年校招笔试题----货币面值

    货币面值

    时间限制:1 秒

    内存限制:128 兆

    特殊判题:

    提交:351

    解决:132

    题目描述:

    小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在游戏中购买各种装备来提升自己。有一天,他突然很想知道这些纸币的组合不能表示的最小面额是多少,请聪明的你来帮助小虎来解决这个财政问题吧。

    输入:

    输入包含多个测试用例,每组测试用例的第一行输入一个整数N(N<=100)表示流通的纸币面额数量,第二行是N个纸币的具体表示面额,取值[1,100]。

    输出:

    对于每组测试用例,输出一个整数,表示已经发行的所有纸币都不能表示的最小面额(已经发行的每个纸币面额最多只能使用一次,但面值可能有重复)。

    样例输入:
    5
    1 2 3 9 100
    5
    1 2 4 9 100
    5
    1 2 4 7 100
    样例输出:
    7
    8
    15

    先排序。然后从小到大相加。比如在 i 处。只要0到i-1的所有值之和都小于i-1。那么可以说所构成的值到此为止出现“断面”。即无法连续。输出前面0到i-1的值之和再加一就好了。


    #include <iostream>
    #include <algorithm>
    using namespace std;
    int main()
    {
    	int n,val[110];
    	while(cin>>n)
    	{
    		for(int i=0;i<n;i++)
    		{
    			cin>>val[i];
    		}
    		sort(val,val+n);
    		int sum=0;
    		for(int i=0;i<n;i++)
    		{
    			if(sum+1<val[i])
    				break;
    			sum+=val[i];
    		}
    		cout<<sum+1<<endl;
    	}
    }
    /*第一次的时候for循环我是这么写的
    */
    for(int i=0;i<n-1;i++)
    {
    	sum+=val[i];
    	if(sum+1<val[i+1])
    		break;
    }
    /*这个有严重问题。
    举例:n=5时
    1、2、3、5、6
    这样在sum=1+2+3+5=11的时候就结束循环了。输出12(sum+1)
    而如果将循环改为:*/
    for(int i=0;i<n;i++)
    {
    	sum+=val[i];
    	if(sum+1<val[i+1])
    		break;
    }
    /*这时在遍历到i=n-1:
    即sum=11+6=17的时候
    会试探着比较sum+1和val[i+1]也就是val[7]
    而val[7]的值是不确定的。
    */



  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082126.html
Copyright © 2011-2022 走看看