zoukankan      html  css  js  c++  java
  • 51nod 1010 只包含因子2 3 5的数

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
     收藏
     关注
    K的因子中只包含2 3 5。满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15。
    所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数。
    例如:n = 13,S中 >= 13的最小的数是15,所以输出15。
    Input
    第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
    第2 - T + 1行:每行1个数N(1 <= N <= 10^18)
    Output
    共T行,每行1个数,输出>= n的最小的只包含因子2 3 5的数。
    Input示例
    5
    1
    8
    13
    35
    77
    Output示例
    2
    8
    15
    36
    80

    ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

    ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中第一个大于val的位置。

    用法如下:

    #include <iostream>  
    #include <algorithm>//必须包含的头文件  
    using namespace std;  
    int main(){  
     int point[10] = {1,3,7,7,9};  
     int tmp = upper_bound(point, point + 5, 7) - point;//按从小到大,7最多能插入数组point的哪个位置  
     printf("%d
    ",tmp);  
     tmp = lower_bound(point, point + 5, 7) - point;////按从小到大,7最少能插入数组point的哪个位置  
     printf("%d
    ",tmp);  
     return 0;  
    }  




    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const LL INF = 1e18+1000;
    const int MAXN = 1e6;
    LL a[MAXN];
    int cnt;
    void Init()
    {
        cnt = 0;
        for(LL i=1; i<INF; i*=2)
            for(LL j=1; j*i<INF; j*=3)
                for(LL k=1; i*j*k<INF; k*=5)
                        a[cnt++] = i*j*k;
    }
    int main()
    {
        Init();
        sort(a,a+cnt);
        int t;
        cin>>t;
        while(t--)
        {
            LL n;
            scanf("%lld",&n);
            printf("%lld
    ",a[lower_bound(a+1,a+cnt+1,n)-a]);
        }
        return 0;
    }





  • 相关阅读:
    排序算法——选择排序
    poj1906
    poj1496
    poj1244
    poj1183
    poj1806
    !!!舒尔茨自律神经训练法
    Google Analytics的能与不能
    乔布斯最伟大的贡献是什么
    冥想呼吸
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387086.html
Copyright © 2011-2022 走看看