贪心算法

作者在 2012-03-22 22:18:26 发布以下内容
描述

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

输入第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;输出如果符合条件,输出Yes,否则输出No;样例输入2 9 10样例输出Yes No
#include <stdio.h>
int main()
{
    int i,j,n,m,s,a[10];
    for(i=1;i<=9;i++)
    {
        s=1;
        for(j=2;j<=i;j++)
            s*=j;
        a[i]=s;
    }
    scanf("%d",&n);
    while(n--)
    {
        int flag=0;
        scanf("%d",&m);
        for(i=9;i>=1;i--)
        {
            if(m==a[i])
            {
                flag=1;
                break;
            }
            if(m>a[i])
                m-=a[i];
        }
        if(m==0)
            flag=1;
        if(flag)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}
 
默认分类 | 阅读 1009 次
文章评论,共0条
游客请输入验证码
文章分类
最新评论