1017第三届程序设计大赛 阶乘之和

#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就行,但是有个要求,必须从大的往前减,也就是先减最大的阶乘,因为很好观察可以知道阶乘数肯定包含输入数内最大的阶乘数。解释不清了,能过就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值