欢迎来到PJCK的博客

(贪心) nyoj91-阶乘之和

91-阶乘之和

 

    内存限制:64MB 时间限制:3000ms 特判: No

 

    通过数:71 提交数:191 难度:3



题目描述:

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

输入描述:

第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;

输出描述:

如果符合条件,输出Yes,否则输出No;

样例输入:

2
9
10

样例输出:

Yes
No

预处理小于阶乘100W的(打表),然后每个输入一个数n,将阶乘从大到小能减就减,最后判断是否等于0
C++代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long a[100];
int main(){
    a[1] = 1;
    a[0] = 1;
    int i = 0;
    while(a[i] < 1000000){   //搞不懂为什们用for语句就输出不对。。。。
        i++;
        a[i] = a[i-1] * i;
    }
    int n;
    scanf("%d",&n);
    while(n--){
        int m;
        scanf("%d",&m);
        for(int j = i - 1; j > 0;j--){
            if(m >= a[j]){
                m -= a[j];
            }
        }
        if(m==0)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

 

posted @ 2019-03-13 20:28  PJCK  阅读(178)  评论(0编辑  收藏  举报