问题标题: 酷町堂:1199

0
0
已解决
曹博扬
曹博扬
初级天翼
初级天翼
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int n,t,x[1000500];
int a[11]={0,1,2,6,24,120,720,5040,40320,362880},c;
int main(){
    for(int i1=1;i1<=9;i1++){
        int s=0;
        s+=a[i1];
        x[s]++;
        for(int i2=2;i2<=9;i2++){
            s+=a[i2];
            x[s]++;
            for(int i3=3;i3<=9;i3++){
                s+=a[i3];
                x[s]++;
                for(int i4=4;i4<=9;i4++){
                    s+=a[i4];
                    x[s]++;
                    for(int i5=5;i5<=9;i5++){
                        s+=a[i5];
                        x[s]++;
                        for(int i6=6;i6<=9;i6++){
                            s+=a[i6];
                            x[s]++;
                            for(int i7=7;i7<=9;i7++){
                                s+=a[i7];
                                x[s]++;
                                for(int i8=8;i8<=9;i8++){
                                    s+=a[i8];
                                    x[s]++;
                                    for(int i9=9;i9<=9;i9++){
                                        s+=a[i9];
                                        x[s]++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>t;
        if(x[t]>0)
            cout<<"YES";
        else
            cout<<"NO";
        cout<<endl;
    }
    return 0;   
}

   可以找错,也可以提供新思路


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

正解思路

对于每个N,倒序遍历你的a数组,如果n>=a[i],就n-=a[i]

如果遍历完数组,n==0,则输出YES

否则输出NO

0
张恩泽
张恩泽
高级天翼
高级天翼

这道题可以用递归求数的阶乘

然后再用n减阶乘(大于阶乘才能减)

如果n == 0,就代表符合条件

否则就不符合

0
我要回答