`
haoran_10
  • 浏览: 444223 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

阶乘只和--贪心算法

    博客分类:
  • java
阅读更多

 

阶乘之和

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述

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

输入
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
如果符合条件,输出Yes,否则输出No;
样例输入
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)(包含源程序).rar

    《算法-阶乘和(信息学奥赛一本通-T1173)》是一本针对信息学竞赛,特别是算法设计与分析的参考资料。这个压缩包包含了一份PDF文档,该文档可能详细介绍了阶乘和这一算法问题及其解决方案,并可能附带有源代码示例,...

    MIT-算法导论-讲义(1)

    最后,lecture06可能涵盖贪心算法和回溯法。贪心算法在每一步选择局部最优解,以期望达到全局最优,如霍夫曼编码。回溯法则用于在解决问题时尝试所有可能的解决方案,当发现错误时退回一步重新选择,如八皇后问题。 ...

    Go-算法学习Golang版

    贪心算法则是每一步都采取当前最优决策,但不保证全局最优,如霍夫曼编码、Prim算法构建最小生成树。 6. **递归与回溯** 递归是解决问题的一种常见方法,如计算阶乘、八皇后问题等。回溯法则常用于解决组合优化...

    算法分析实验报告:熟悉环境和递归算法、动态规划算法、贪心算法、回溯法

    在本实验报告中,我们将深入探讨四种核心的算法思想:递归算法、动态规划、贪心算法和回溯法。这些算法在计算机科学和信息技术领域起着至关重要的作用,是解决复杂问题的关键工具。 首先,让我们来理解递归算法。...

    算法课件从0-7章,非常不错

    - 贪心算法的应用:霍夫曼编码、Prim最小生成树、Dijkstra最短路径算法等实例。 5. **第5章 回溯法** - 回溯法原理:介绍回溯法在解决组合优化问题中的作用。 - 回溯法步骤:设立剪枝条件、回溯规则等。 - 应用...

    递归与贪心算法的应用.ppt

    递归与贪心算法的应用 递归是一种常用的编程技巧,它...递归和贪心算法是两种常用的编程技巧,它们可以使得程序更加简洁、高效和智能。在实际应用中,需要根据实际情况选择合适的编程技巧,以提高程序的效率和可读性。

    87版社-计算机算法设计与分析(第2版)

    - 展示了贪心算法的应用,如霍夫曼编码、Prim算法构建最小生成树等。 5. **第5章:回溯法与分支限界法** - 详述了回溯法的基本步骤和停止条件,如何通过剪枝减少搜索空间。 - 探讨了分支限界法在解决优化问题中...

    《信息学竞赛宝典-基础算法》视频讲解-第8章 高精度算法

    《信息学竞赛宝典--基础算法》,人民邮电出版社 c++基础算法视频讲解---第8章 第8章 8.1.2高精度加法 8.1.6高精度数除以低精度数1 ...第06章 贪心算法 第07章 排序算法 第08章 高精度算法 第09章 搜索算法

    Python-算法.zip

    8. **贪心算法**:贪心算法在每一步选择局部最优解,希望最终能得到全局最优解,如霍夫曼编码、活动安排问题。 9. **概率和随机算法**:在某些问题中,随机算法可以提供更高效的解决方案,比如模拟退火算法、...

    各大软件公司面试--算法笔试题

    5. **贪心算法**:通常用于求解局部最优解,以期望达到全局最优,如霍夫曼编码、Prim和Kruskal最小生成树算法。 6. **回溯法**:用于解决组合优化问题,如八皇后问题、数独求解、图的着色问题等。 7. **图论算法**...

    算法设计与分析-杨克昌课件

    经典的贪心算法问题有霍夫曼编码和Prim算法构建最小生成树。 6. **回溯法**:当面临多种可能的选择时,回溯法通过试探性的前进和后退寻找解决方案,如八皇后问题和图的着色问题。 7. **图论算法**:图论在算法中...

    麻省理工学院-算法导论课件文档

    7. **贪心算法**:每次选择当前最优解,期望全局最优,如霍夫曼编码和 Prim 或 Kruskal 的最小生成树算法。 8. **图算法**:如深度优先搜索(DFS)和广度优先搜索(BFS),以及Dijkstra最短路径算法和Floyd-...

    51CTO下载-经典算法大全

    5. **贪心算法**:在部分最优解的基础上一步步构建全局最优解,如霍夫曼编码、活动安排问题等。 6. **回溯法与分支限界法**:用于解决组合优化问题,如八皇后问题、N皇后问题、旅行商问题等,通过尝试所有可能的...

    C语言算法4-9章下载

    - **典型应用**:通过经典案例(如活动安排问题、霍夫曼编码等)来展示贪心算法的应用场景。 #### 分治策略 - **分治思想**:掌握分治算法的核心思想——将大问题分解成小问题来解决。 - **实例分析**:以归并排序...

    [麻省理工学院-算法导论].Introduction.to.Algorithms.-.Homework

    《麻省理工学院-算法导论》是一门深入探讨计算机科学核心领域的课程,主要关注算法的设计、分析和应用。这门课程的作业部分,包括了多个PDF文件,如ps1.pdf到ps8sol.pdf,提供了丰富的实践问题和解答,旨在帮助学生...

    python算法.zip

    8. **贪心算法**: - 在每一步选择当前最优解,以期望得到全局最优解,例如霍夫曼编码和活动安排问题。 9. **回溯法**: - 当前选择无效时退回一步,尝试其他可能,常见于解谜游戏和组合优化问题。 这个"算法...

    漫画算法:小灰的算法之旅 魏梦舒,漫画算法-小灰的算法之旅源码.zip

    7. **贪心算法**:贪心算法通过每次做出局部最优选择,期望达到全局最优解。如霍夫曼编码、Prim算法构建最小生成树等。 8. **分治法**:将大问题分解为小问题,独立解决后再合并,如归并排序、快速排序等。 源码...

    Python-Python描述的数据结构和算法

    - 贪心算法在每一步选择最优解,如霍夫曼编码、活动安排问题等。 3. **设计模式** - **工厂模式**:用于创建对象,提供一个接口创建一系列相关或相互依赖的对象,无需指定具体类。 - **单例模式**:确保一个...

    Cliford《数据结构及算法分析》资料

    - **贪心算法**:局部最优解来达到全局最优,如Prim算法和Kruskal算法用于构造最小生成树。 3. **递归与分治策略**: - **递归**:函数调用自身,解决复杂问题,如阶乘计算、斐波那契数列、汉诺塔问题等。 - **...

Global site tag (gtag.js) - Google Analytics