#include<stdio.h>
int main()
{
int a[11],b[101]={1};
int c,d=1,e,f,g;
for(c=0;c<11;c++)
{
d=d*(c+1);
a[c]=d;
}
scanf("%d",&e);
for(f=0;f<e;f++)
{
scanf("%d",&b[f]);
}
for(f=0;f<e;f++)
{
for(g=10;g>=0;g--)
{
b[f]=b[f]-a[g];
if(b[f]<0)
b[f]=b[f]+a[g];
if(b[f]==0)
{printf("Yes\n");
break;}
if(g==0&&b[f]!=1)
printf("No\n");
}
}
}
其实挺简单的,一旦想到思路就直接出来了,正确率也可见的高,就是构造一个阶乘数组然后将阶乘数组逐个减去如果等于0就行,但是有个要求,必须从大的往前减,也就是先减最大的阶乘,因为很好观察可以知道阶乘数肯定包含输入数内最大的阶乘数。解释不清了,能过就行
11-04
467