zoukankan      html  css  js  c++  java
  • NYOJ 91 阶乘之和(贪心)

    试题连接:点击打开链接

    阶乘之和

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
    描述

    给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;

    输入
    第一行有一个整数0<m<100,表示有m组测试数据;
    每组测试数据有一个正整数n<1000000;
    输出
    如果符合条件,输出Yes,否则输出No;
    样例输入
    2
    9
    10
    样例输出
    Yes
    No
    贪心思想:
    一个数要是这些数的和,那肯定是比他小的数累加得来的,!而阶乘数之间存在着倍数关系!(即如果n是"阶乘的和",则其中每一项阶乘一定是,值最小项的倍数),所以每次只用查找比n小的最大阶乘数。
    提示:

    先将小于1000000的阶乘存入数组方便计算。

    #include <iostream>
    
    using namespace std;
    
    int a[10];
    int m,n;
    
    int main()
    {
        for(int i=1,tmp=1; i<=9; i++)  //求出阶乘
        {
            tmp*=i;
            a[i]=tmp;
        }
    
        cin>>m;
        while(m--)
        {
            cin>>n;
            for(int i=9; i>=1; i--)
            {
                if(n>=a[i])
                {
                    n-=a[i];
                    if(n==0)
                    {
                        cout<<"Yes"<<endl;
                        break;
                    }
                }
    
            }
            if(n!=0)
                cout<<"No"<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    CSS定位
    使用开源框架进行get,post提交
    使用httpclient框架分别用post,get方式提交
    C++ const_cast
    C++ 类继承 常量对象调用函数
    C++ 类继承 子类调用父类
    C++ explicit关键字
    C++ class入门
    C#检测耗时操作
    面向对象编程入门
  • 原文地址:https://www.cnblogs.com/zhanyeye/p/9746089.html
Copyright © 2011-2022 走看看