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

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

Time Limit:1000MS  Memory Limit:65536K
Total Submit:554 Accepted:329

Description

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

Input

第一行有一个整数M(0 < M < 100)表示有M组测试数据; 
每组测试数据有一个正整数N(0 < N <= 100000);

Output

如果符合条件,输出Yes,否则输出No;

Sample Input

3
24
29
31

Sample Output

Yes
No
Yes

slove:

#include<stdio.h>
void main()
{
	long int a[100],b[100];
	int i,j,m,z,x,k;
    scanf("%d",&m);
	for(i=0;i<m;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<m;i++)
	{
		z=0;
		x=1;
		for(j=0;j<=a[i];j++)
		{
			b[j]=x;
			x=x*(j+1);
			if(x>=a[i])
			{
				for(k=j;k>0;k--)
				{
					if(a[i]==b[k])
					{
						z=1;
						break;
					}
					else if(a[i]-b[k]>0)
					{
						a[i]=a[i]-b[k];
					}
				}
			}
		}
		if(z)
			printf("Yes\n");
		else
			printf("No\n");
		
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_40789841/article/details/80966910