阶乘之和

来源:互联网 发布:java递归获取子节点 编辑:程序博客网 时间:2024/06/06 02:45

阶乘之和
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
输入
第一行有一个整数0

#include<iostream>#include<cmath>using namespace std;int a[21],ans=0,n,k;void ss(int t, int s, int l){    if (t == k)    {        if(s==n) ans++;    }    else    {        for (int i = l;i<9;i++)        {            ss(t + 1, s + a[i],i+ 1);        }    }}int main(){    int i;    int x=1;    for(i=0;i<9;i++)    {        a[i]=x*(i+1);        x=a[i];    }    int t;    cin>>t;    while(t--)    {        ans=0;        cin>>n;        for(k=1;k<=9;k++)        {            ss(0,0,0);        }        if(ans>0) cout<<"Yes";        else cout<<"No";        cout<<endl;    }    return 0;}
0 0