您的位置:首页 > 其它

poj 1775 简单搜索

2010-05-07 20:03 218 查看
这道题反复做了好多次才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 InsertToEditor('代码 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 {
a[i]=i*a[i-1];
}
while(scanf("%d",&n)!=EOF&&n>=0)
{
if(n==0)
{
printf("NO\\n");
continue;
}
for(i=11;i>=0&&n>0;i--)
{
if(n>=a[i])
n-=a[i];
}
if(n==0)
printf("YES\\n");
else
printf("NO\\n");
}
return 1;
}

')

还有博客园怎么这么贴代码了?是不是我这里太卡了?顺便说一句,今天晚上网络不卡了,太好了,后天就比赛了,今天终于拿到学校给的钱了,只有做acm才能使我安心。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: