阶乘之和
时间限制:3000 ms | 内存限制:65535 KB
难度:3
给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
每组测试数据有一个正整数n<1000000;
2 9 10
Yes No
分析:贪心算法:1.数据中n<1000000<10!,所以,用1-9的阶乘即可,所以先把1-9的阶乘数据存起来
2.把一个数据,先找到一个最大的小于测试数据的阶乘,然后把这个阶乘是它的一部分,然后在找下一个
Java代码:
/* 题目91 * * 阶乘之和 */ #include<iostream> using namespace std; int jie[10]; bool testnum(int num,int now){ if(num==0)return true; if(num!=0&&now==0)return false; if(num>jie[now]){ num = num - jie[now]; now = now -1; }else{ for(int j=1;j<=now;j++){ if(num<jie[j+1]&&num>=jie[j]){ num = num - jie[j]; now = j-1; break; } } } testnum(num,now); } int main(){ int all = 1; int i; for(i=1;i<=9;i++){ all = all*i; jie[i] = all; } int num; int testNum; bool value[100]; cin>>num; for(i=0;i<num;i++){ cin>>testNum; value[i] = testnum(testNum,9); } for(i=0;i<num;i++){ if(value[i]){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } } return 0; }
C/C++代码:
#include<iostream> using namespace std; int main() { int n; int k[9]={1,2,6,24,120,720,5040,40320,362880}; cin>>n; while(n--) { bool flag=false; int m; cin>>m; for(int i=8;i>=0;i--) { if(m>=k[i] && m>0) m-=k[i]; if(m==0) flag=true; } if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; } }
相关推荐
《算法-阶乘和(信息学奥赛一本通-T1173)》是一本针对信息学竞赛,特别是算法设计与分析的参考资料。这个压缩包包含了一份PDF文档,该文档可能详细介绍了阶乘和这一算法问题及其解决方案,并可能附带有源代码示例,...
最后,lecture06可能涵盖贪心算法和回溯法。贪心算法在每一步选择局部最优解,以期望达到全局最优,如霍夫曼编码。回溯法则用于在解决问题时尝试所有可能的解决方案,当发现错误时退回一步重新选择,如八皇后问题。 ...
贪心算法则是每一步都采取当前最优决策,但不保证全局最优,如霍夫曼编码、Prim算法构建最小生成树。 6. **递归与回溯** 递归是解决问题的一种常见方法,如计算阶乘、八皇后问题等。回溯法则常用于解决组合优化...
在本实验报告中,我们将深入探讨四种核心的算法思想:递归算法、动态规划、贪心算法和回溯法。这些算法在计算机科学和信息技术领域起着至关重要的作用,是解决复杂问题的关键工具。 首先,让我们来理解递归算法。...
- 贪心算法的应用:霍夫曼编码、Prim最小生成树、Dijkstra最短路径算法等实例。 5. **第5章 回溯法** - 回溯法原理:介绍回溯法在解决组合优化问题中的作用。 - 回溯法步骤:设立剪枝条件、回溯规则等。 - 应用...
递归与贪心算法的应用 递归是一种常用的编程技巧,它...递归和贪心算法是两种常用的编程技巧,它们可以使得程序更加简洁、高效和智能。在实际应用中,需要根据实际情况选择合适的编程技巧,以提高程序的效率和可读性。
- 展示了贪心算法的应用,如霍夫曼编码、Prim算法构建最小生成树等。 5. **第5章:回溯法与分支限界法** - 详述了回溯法的基本步骤和停止条件,如何通过剪枝减少搜索空间。 - 探讨了分支限界法在解决优化问题中...
《信息学竞赛宝典--基础算法》,人民邮电出版社 c++基础算法视频讲解---第8章 第8章 8.1.2高精度加法 8.1.6高精度数除以低精度数1 ...第06章 贪心算法 第07章 排序算法 第08章 高精度算法 第09章 搜索算法
8. **贪心算法**:贪心算法在每一步选择局部最优解,希望最终能得到全局最优解,如霍夫曼编码、活动安排问题。 9. **概率和随机算法**:在某些问题中,随机算法可以提供更高效的解决方案,比如模拟退火算法、...
5. **贪心算法**:通常用于求解局部最优解,以期望达到全局最优,如霍夫曼编码、Prim和Kruskal最小生成树算法。 6. **回溯法**:用于解决组合优化问题,如八皇后问题、数独求解、图的着色问题等。 7. **图论算法**...
经典的贪心算法问题有霍夫曼编码和Prim算法构建最小生成树。 6. **回溯法**:当面临多种可能的选择时,回溯法通过试探性的前进和后退寻找解决方案,如八皇后问题和图的着色问题。 7. **图论算法**:图论在算法中...
7. **贪心算法**:每次选择当前最优解,期望全局最优,如霍夫曼编码和 Prim 或 Kruskal 的最小生成树算法。 8. **图算法**:如深度优先搜索(DFS)和广度优先搜索(BFS),以及Dijkstra最短路径算法和Floyd-...
5. **贪心算法**:在部分最优解的基础上一步步构建全局最优解,如霍夫曼编码、活动安排问题等。 6. **回溯法与分支限界法**:用于解决组合优化问题,如八皇后问题、N皇后问题、旅行商问题等,通过尝试所有可能的...
- **典型应用**:通过经典案例(如活动安排问题、霍夫曼编码等)来展示贪心算法的应用场景。 #### 分治策略 - **分治思想**:掌握分治算法的核心思想——将大问题分解成小问题来解决。 - **实例分析**:以归并排序...
《麻省理工学院-算法导论》是一门深入探讨计算机科学核心领域的课程,主要关注算法的设计、分析和应用。这门课程的作业部分,包括了多个PDF文件,如ps1.pdf到ps8sol.pdf,提供了丰富的实践问题和解答,旨在帮助学生...
8. **贪心算法**: - 在每一步选择当前最优解,以期望得到全局最优解,例如霍夫曼编码和活动安排问题。 9. **回溯法**: - 当前选择无效时退回一步,尝试其他可能,常见于解谜游戏和组合优化问题。 这个"算法...
7. **贪心算法**:贪心算法通过每次做出局部最优选择,期望达到全局最优解。如霍夫曼编码、Prim算法构建最小生成树等。 8. **分治法**:将大问题分解为小问题,独立解决后再合并,如归并排序、快速排序等。 源码...
- 贪心算法在每一步选择最优解,如霍夫曼编码、活动安排问题等。 3. **设计模式** - **工厂模式**:用于创建对象,提供一个接口创建一系列相关或相互依赖的对象,无需指定具体类。 - **单例模式**:确保一个...
- **贪心算法**:局部最优解来达到全局最优,如Prim算法和Kruskal算法用于构造最小生成树。 3. **递归与分治策略**: - **递归**:函数调用自身,解决复杂问题,如阶乘计算、斐波那契数列、汉诺塔问题等。 - **...