zoukankan      html  css  js  c++  java
  • CDOJ 1264 人民币的构造 区间问题+数论

                                             人民币的构造
    

    Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)

    Submit Status
    我们都知道人民币的面值是1、2、5、10,为什么是这个数值呢,我们分析了下发现,从1−10的每个数字都可以由每种面值选出至多一张通过加法和减法(找钱)来构成,(比如:1+2=3,5−1=4,5+1=6,5+2=7,1+2+5=8,10−1=9)

    但是实际上,我们只需要1、2、7三种面值就可以组成1−10的每一个数字了

    (1+2=3,7−1−2=4,7−2=5,7−1=6,7+1=8,7+2=9,7+1+2=10)

    那么现在问题来了,给一个数n,请问最少需要多少种不同的面值就可以构成从1−n的所有数字,注意在构成每一个数字时同种面值不能超过1张。

    Input
    一个数字n(1<=n<=100000)

    Output
    一个数字,代表最少需要多少种不同的面值可以构成从1−n的所有数字。

    Sample input and output
    Sample Input Sample Output
    10
    3
    Source
    第七届ACM趣味程序设计竞赛第三场(正式赛)
    ;
    假设当前能取到1-K区间,,加入一个数A后(A>K),,能取到的数的区间为[A-K,A+K],因为A的量是不定的,为了尽量右移,所以A-K=K+1,所以A=2*K+1,则最右端点A+K=3*K+1,,即能取到【1,3*K+1】;

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int a[10005];
    int main()
    {
        a[1]=1;
        for(int i=2;i<=12;i++)
            a[i]=3*a[i-1]+1;
        int n;
        while(~scanf("%d",&n))
        {
            for(int i=1;i<=12;i++)
                if(n<=a[i])
               {
                  cout<<i<<endl;
                  break;
               }
        }
        return 0;
    }
    
  • 相关阅读:
    SQL 中单引号 和一些特殊字符的处理
    jquery 删除table行,该如何解决
    jQuery获取Select选中的Text和Value,根据Value值动态添加属性等
    C#中DataTable
    jquery操作select(取值,设置选中)
    JS刷新页面总和!多种JS刷新页面代码!
    VS中代码对齐等快捷键
    SQL递归查询(with cte as)
    SQL Server 公用表表达式(CTE)实现递归的方法
    linux ls和 ll 命令
  • 原文地址:https://www.cnblogs.com/smilesundream/p/6642542.html
Copyright © 2011-2022 走看看