• 网易游戏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]的值是不确定的。
    */



  • 相关阅读:
    kafka的概念
    java的多线程:java安全问题产生的原因与JMM的关系
    java的多线程:线程安全问题
    web自动化之键盘操作
    获取cookie里面的sessionid
    Python连接mysql数据库
    Python 发送Email
    Python日志模块
    openxl模块从excel里面读取数据
    Python读取配置文件
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082126.html
Copyright © 2020-2023  润新知