poj1775 - Sum of Factorials
来源:互联网 发布:js bind方法带参数 编辑:程序博客网 时间:2024/05/16 09:32
题目大意:给出一个n,问n是否可以由一些阶乘的和组成,如果可以输出YES,否则输出NO,输入
-1代表结束
解题思路:因为n不超过1,000,000,所以我们算一下当n = 9的时候9!= 362880,那么即10!会
大于1000000,所以阶乘最大也是9!,所以我们将1-9的阶乘打表,然后利用背包或者是暴利搜索
都可以很容易解决这个问题。
#include <iostream>using namespace std;#define MAXF 10//最大范围是10class CFac{public:CFac(int n);CFac();~CFac();void SetAns(int n);int Run(int cur,int sum);private:int m_nAns;int m_nFacArr[MAXF];};CFac::CFac(){m_nFacArr[0] = 1;//特殊,0!=1for(int i = 1;i < MAXF;i++){//打表计算1 - 9的阶乘m_nFacArr[i] = m_nFacArr[i - 1] * i;}}CFac::CFac(int n){CFac();m_nAns = n;}void CFac::SetAns(int n){m_nAns = n;}int CFac::Run(int cur,int sum){//深搜解决if(sum == m_nAns) return 1;if(cur >= MAXF) return 0;if(sum > m_nAns) return 0;if(Run(cur+1,sum+m_nFacArr[cur])) return 1;return Run(cur+1,sum);}CFac::~CFac(){}int main(){int n;CFac fac;while(cin>>n){if(n < 0) break;if(n == 0){cout<<"NO"<<endl;continue;}fac.SetAns(n);if(fac.Run(0,0)){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;}
- poj1775 - Sum of Factorials
- zoj 2358||poj1775 Sum of Factorials(阶乘)
- UVALive2953 POJ1775 ZOJ2358 Sum of Factorials【打表+穷尽搜索】
- Sum of Factorials
- Sum of Factorials
- Sum of Factorials
- Sum of Factorials zoj
- 1038.Sum of Factorials
- fjnu 1050 Sum of Factorials
- FOJ 1106 Sum of Factorials
- poj 1775 Sum of Factorials
- zoj 2358 Sum of Factorials
- poj 1775 Sum of Factorials
- Problem 1106 Sum of Factorials
- POJ 1775 Sum of Factorials
- HOJ 1302 Sum of Factorials
- ZOJ 2358 Sum of Factorials
- 题目1038:Sum of Factorials
- thinkpad下win8换成win7系统
- Lock用法
- 关于.net面试
- 浅谈挂销账
- 一步步搭建Ubuntu环境——linux下删除windows换行符^M
- poj1775 - Sum of Factorials
- mfc流程执行,theApp初始化,DECLARE_DYNAMIC和m_pMainWnd
- MSSQL清除或收缩数据库日志
- HTML嵌百度视频播放器
- Unity3d 封装字段并在Inspector中显示
- Java正则表达式详解
- 《数据结构与程序设计》程序设计技术规则总结
- Sobel算子
- OC学习那些事:Category