(贪心) nyoj91-阶乘之和

mac2022-06-30  86

91-阶乘之和

 

内存限制:64MB 时间限制:3000ms 特判: No

 

通过数:71 提交数:191 难度:3

题目描述:

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

输入描述:

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

输出描述:

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

样例输入:

复制 2 9 10

样例输出:

Yes No预处理小于阶乘100W的(打表),然后每个输入一个数n,将阶乘从大到小能减就减,最后判断是否等于0C++代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; long long a[100]; int main(){ a[1] = 1; a[0] = 1; int i = 0; while(a[i] < 1000000){ //搞不懂为什们用for语句就输出不对。。。。 i++; a[i] = a[i-1] * i; } int n; scanf("%d",&n); while(n--){ int m; scanf("%d",&m); for(int j = i - 1; j > 0;j--){ if(m >= a[j]){ m -= a[j]; } } if(m==0) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }

 

转载于:https://www.cnblogs.com/Weixu-Liu/p/10526023.html

相关资源:基于visual Studio2013解决C语言竞赛题之阶乘求和
最新回复(0)