这道题反复做了好多次才ac,可能就是好久不做题的原因,第一次超时,数组开得太太太大了,后来输出错误,忘加!=EOF了,后来一直wa,后来看网上代码,知道自己题目理解错了,首先0的阶乘是1,其次俩个小的数的阶乘不可能大于那个大数的,所以网上有人用dfs,把题目想难了,不过我很欣赏dfs,这道题用dfs好像有点小题大做了,但是可以避免我上述的那种情况,就是假如俩个小数的阶乘大于大数的阶乘,用dfs就完全没有错误,我头开始没想到这么搜索,其次,不是连续的阶乘相加,是随意的
1 #include <stdio.h>
2 int main()
3 {
4 int a[12];
5 int i,j,n,f; 6 a[0]=1;
7 a[1]=1;
8 for(i=2;i<12;i++)
9 {
10 a[i]=i*a[i-1];
11 }
12 while(scanf("%d",&n)!=EOF&&n>=0)
13 {
14 if(n==0)
15 {
16 printf("NO\\n");
17 continue;
18 }
19 for(i=11;i>=0&&n>0;i--)
20 {
21 if(n>=a[i])
22 n-=a[i];
23 }
24 if(n==0)
25 printf("YES\\n");
26 else
27 printf("NO\\n");
28 }
29 return 1;
30 }
31
还有博客园怎么这么贴代码了?是不是我这里太卡了?顺便说一句,今天晚上网络不卡了,太好了,后天就比赛了,今天终于拿到学校给的钱了,只有做acm才能使我安心。。。。。。