问题标题: 酷町堂:1199

0
0
尹宗鑫
尹宗鑫
新手守护
新手守护

1199   阶乘之和

题目描述 Description

给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;

输入描述 Input Description

第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;

输出描述 Output Description

如果符合条件,输出YES,否则输出NO;

样例输入 Sample Input


 

2
9
10

样例输出 Sample Output


 

YES
NO

 

http://judge.codingtang.com/problem/1199/

40分代码

尹宗鑫在2018-11-11 21:10:09追加了内容

路过的人都看一看

尹宗鑫在2018-11-11 21:10:32追加了内容

是一道贪心


0
赵逸凡
赵逸凡
初级启示者
初级启示者
int s[9]={1,2,6,24,120,720,5040,40320,362880};

给你个数组,自己考虑1!,2!,3!

赵逸凡在2018-11-11 21:17:40追加了内容

这道题你需要用计算器算

赵逸凡在2018-11-11 21:17:59追加了内容

手写数据不方便

0
杜文博
杜文博
资深守护
资深守护
  1. int m;

  2. scanf("%d",&m);

  3. int k[9] = {1,2,6,24,120,720,5040,40320,362880};

  4. while(m--)

  5. {

  6. int n;

  7. scanf("%d",&n);

  8. bool f=false;

  9. for(int i=8;i>=0;--i)

  10. {

  11. if(n>=k[i]&&n>0)

  12. n-=k[i];

  13. if(n==0)

  14. f=true;

  15.  
  16. }

  17. if(f)

  18. printf("Yes\n");

  19. else

  20. printf("No\n");

  21. }

0
黄子扬
黄子扬
初级天翼
初级天翼

依次纪录阶乘,然后直接判断真假即可

0
0
王文博
王文博
缔造者之神
缔造者之神

记录阶乘,判断真假

0
王文博
王文博
缔造者之神
缔造者之神

还可以直接写switch(不要真的这样做)

0
李致远
李致远
高级光能
高级光能

//f[1]==1;

最后枚举即可!

0
被禁言 李秉轩
李秉轩
修练者
修练者
  • int s[11]={0,3628800,362880,40320,5040,720,120,24,6,2,1};
  • int main(){
  • //freopen(".in","r",stdin);
  • //freopen(".out","w",stdout);
  • int m,n;
  • cin>>m;
  • for(int i=1;i<=m;i++){
  • cin>>n;
  • for(int i=1;i<=10;i++){
  • if(n-s[i]>=0){
  • n-=s[i];
  • }
  • }
  • if(n==0)cout<<"YES"<<endl;
  • else cout<<"NO"<<endl;
  • }
  • //fclose(stdin);
  • //fcolse(stdout);
  • return 0;
  • }
0
张雨泽
张雨泽
修练者
修练者
#include<iostream>
#include<cstdio>
using namespace std;
定义字符串s数组={0,3628800,362880,40320,5040,720,120,24,6,2,1};
int main(){
    int m,n;
    cin>>m;
    遍历1-m;
        输入n;
        for(int i=1;i<=10;i++){
            如果他们的差比0大
                n-=s[i];

            如果(输入的数等于0)
                cout<<"YES"<<endl;
            else if(!(输入的数等于0)&&(还有一个条件,仔细想想~~))
                cout<<"NO"<<endl;
            }
        }
    }
    return 0;
}

 

0
甄子烨
甄子烨
高级光能
高级光能

一枪秒了!没什么好说的!

呃呃呃,抱歉,串台了。

直接上核弹部分:

while(n--) {

cin>>m;

for(i=9;i>0;i--) {

if(m-a[i]>0)

m-=a[i];

else

if(m-a[i]==0) {

m=0; break;

}

}

望采纳!!

0
甄子烨
甄子烨
高级光能
高级光能

一枪秒了!没什么好说的!

呃呃呃,抱歉,串台了。

直接上核弹部分:

while(n--) {

cin>>m;

for(i=9;i>0;i--) {

if(m-a[i]>0)

m-=a[i];

else

if(m-a[i]==0) {

m=0; break;

}

}

望采纳!!

0
0
我要回答