`
1140566087
  • 浏览: 559338 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18538
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:314177
Group-logo
J2ME 基础学习课程集
浏览量:18757
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17583
社区版块
存档分类
最新评论

21位数的花朵数

ACM 
阅读更多
import java.math.BigInteger;


//花朵数
public class Flower {
	
	/*
	 *   先求出 0- 9 的 21 次方 ,用BigInteger 的数组进行保存
	 *   使用一个数组保存: 0- 9 在 21 位数中出现的次数
	 *   
	 *   使用递归,找到每个数出现次数的可能,找到一种结果计算一次; 看是否符合条件
	 * 
	 * */
	
	//每次求出 0-9 的 21 次方
	public static BigInteger p(int a){
		BigInteger base = BigInteger.ONE;
		for(int i=0;i<21;i++){
			base = base.multiply(BigInteger.valueOf(a));
		}
		return base;
	}
	
	//用于计算
	public static void ji_suan(BigInteger[] pwd,int[] nn){
		// 求和
		BigInteger sum = BigInteger.ZERO;
		for(int i=0;i<10;i++){
			sum=sum.add(pwd[i].multiply(BigInteger.valueOf(nn[i])));
		}
		
		String s=""+sum ;		//转换成字符
		
		if(s.length()!=21){
			return;
		}
		
		//确定和中各数字出现多少次
		int[] nn2 = new int[10];
		for(int i=0;i<21;i++){
			nn2[s.charAt(i)-'0']++;
		}
		
		//测试是否与nn[] 中个数数对应的位置数目相同
		for(int i=0;i<10;i++){
			if(nn[i] !=nn2[i]){
				return;
			}
		}
		
		//完全匹配打印结果
		System.out.println(s);
		
	}
	
	//递归  :判断每个数出现次数的可能
	public static void f(BigInteger[] pwd,int[] nn,int current,int use){
		
		if(current==9){		//前面的数都定下来了,那么 9 出现的次数
			nn[current]=21-use;
			ji_suan(pwd,nn);	//此时nn 里面保存的是此时的一种情况
			return;
		}
		
		for(int i=0;i<=21-use;i++){
			nn[current] = i;	//记录当前数出现的次数
			f(pwd,nn,current+1,use+i);
		}
	}
	
	public static void main(String[] args){
		// 0- 9 的 21 次方
		BigInteger[] pwd = {p(0),p(1),p(2),p(3),p(4),p(5),p(6),p(7),p(8),p(9)};
		// 0 - 9 出现的次数
		int[] nn = new int[10];
		f(pwd,nn,0,0);
		
	}
}
分享到:
评论

相关推荐

    21位花朵数

    《C语言实现21位花朵数的算法解析》 在编程竞赛中,有时会遇到一些特殊的题目,如“21位花朵数”。这个题目源于某次蓝点杯大赛,要求求解10个数字(0-9)的21次方的所有可能组合,并确保每个数字在组合中出现的次数...

    利用Java快速查找21位花朵数示例代码

    Java快速查找21位花朵数示例代码 Java快速查找21位花朵数是一种基于Java语言的算法,旨在快速查找21位花朵数。这种算法通过使用BigInteger类和ArrayList类来实现快速查找。 知识点1:BigInteger类 BigInteger类是...

    一年级数学下册两位数减一位数和整十数退位人教新课标PPT课件.pptx

    这篇PPT课件是针对一年级数学下册的内容,主要讲解了两位数减一位数和整十数的退位计算方法。教学目标旨在帮助学生在理解算理的基础上掌握口算技巧,提升他们的观察能力、口头表达能力和推理归纳能力,同时培养发散...

    21位水仙花数JAVA代码

    根据给定的信息,本文将详细解析“21位水仙花数JAVA代码”的知识点,包括其定义、实现原理以及代码解读。 ### 一、水仙花数简介 水仙花数是一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如...

    2011国信南点杯C本科模拟题

    2. **编程约束** - 题目要求在3分钟内解决N=21的花朵数问题,这需要一个高效算法,而不是简单的暴力遍历所有可能的21位数。这可能涉及到高精度计算和优化算法。 3. **C语言基础** - 给定的题目包含了几个C语言的...

    两三位数除法应用题一共65道.doc

    5. **组合问题**:第7题和第15题,涉及花朵或其他物品的组合,要求最大化组合数量。 6. **整除与余数**:例如第13题和第38题,计算除法的商和余数。 7. **比例和比较**:第26题、第32题和第37题,涉及动物数量的比例...

    一年级数学下册(两位数加一位数)进位加法11.ppt

    例如,在例子中,7+21,7是个位数,21中的1也是个位数,这两个个位数相加等于28,因为超过10,所以个位向十位进位1,十位上的数不变,因此结果是28。 其次,对于两位数加整十数的情况,整十数上的数要与两位数的十...

    人教版三年级下册数学第二单元测试卷( 除数是一位数的除法).docx

    7. **平均数计算**:第8题,要求计算平均每人折的花朵数和平均每个小组折的花朵数,涉及到平均数的计算方法。 8. **整除与余数性质**:第9题,702÷7的商末尾0的数量,需要学生理解被除数与除数的关系。 9. **中间...

    百以内的数和认识人民币.ppt

    1. 估一估与数一数:这部分旨在训练孩子的估算能力和实际计数能力,例如估测花朵的数量,然后进行实际的点数确认。 2. 数的读写:通过连线和填写数字的方式,学习60、84、42等数字的读写,同时理解个位和十位上的...

    2016春三年级数学下册第2单元除数是一位数的除法测试题无答案新版新人教版.doc

    16. 应用题:解决实际问题,如花朵的分配,水果运输,药物的使用天数,销售金额和平均数的计算,以及捐款分配,这些都是将数学知识应用到实际场景中的例子。 通过这个测试题,学生不仅需要掌握除数是一位数的除法的...

    两位数乘两位数竖式计算.doc

    10. **应用题**:实际生活中的数学问题,如分配花朵到花坛,分组活动,图书分配,读书计划,以及水果的平均分配,这些题目都需要运用到乘法和除法的知识。 总的来说,这份文档涵盖了两位数乘法的竖式计算及其在各种...

    百以内的数和认识人民币 (3).ppt

    通过观察图片中的花朵数量,孩子需要能够准确地数出总数,并在没有全部展示的情况下进行估算。例如,图中有50朵花,孩子需要能够估测并圈出52朵花。 二、数的读写 此部分涉及数字的书写和读音。孩子们需要学会正确...

    小学数学三年级(下册)第二单元练习题.doc

    (2) 57除以一个最高位为3的五位数,商可能是一位数也可能为两位数,取决于五位数的大小,错误。 (3) 被除数的位数减去除数的位数不能确定商的位数,错误。 (4) 要求单价,确实需要知道总价和数量,正确。 (5) 此题是...

    新人教四年级下册数学小数加减法例小数加减法例PPT学习教案.pptx

    当两个小数的位数不同时,可以在较小数的末尾添加零以使位数对齐,然后进行加法运算,例如6.45 + 8.3 = 14.75。 - **小数减法**:类似地,减法中也可以先补零再运算,如8.3 - 6.45 = 1.85。 4. **小数加减法的注意...

    小学一年级下册数学整十数加减整十数.pptx

    通过这样的提问,帮助他们建立起整十数与个位数之间数量关系的理解。 整十数的加减法主要包含两个方面:一是理解整十数的组成,二是学习加减法的基本规则。例如,10+20的计算,可以解释为1个十加上2个十等于3个十,...

    python求解水仙花数的方法

    一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。 #!/usr/bin/python def get_flower(n, ofile): D_pow=[pow(i,n) for i in range(0,10)] V_min=1*pow(10,n-1) V_max...

    第二学期冀教版一年级数学课课练及答案全册12精选.doc

    正确的加法竖式方法是将相同位数的数字相加,个位数与个位数相加,十位数与十位数相加。如65+24应先算5+4=9,然后6+2=8,所以结果是89。 2. **比较大小**: 学生需要理解并运用“>”、“”或“=”来比较两个数值...

    二年级数学上册 2.2两位数减两位数习题(无答案) 新人教版 试题.doc

    口算是基础,包括简单的两位数减一位数或整十数,如37-5、16-8等。通过口算训练学生的快速心算能力。竖式计算则进一步提升了难度,让学生理解减法的运算过程,例如84-40、98-80等。此外,习题中还引入了实际问题,如...

    人教版五年级数学下册第二单元_2、5、3的倍数的特征练习课.ppt

    首先,对于2的倍数的特征,我们知道一个数如果能够被2整除,那么它的个位数必须是0、2、4、6或8。例如,60、75、150、582都能被2整除,因为它们的个位数分别是0、5、0和2,符合2的倍数特征。 接着,5的倍数的特征是...

    (中小学教育)一下整十数加、减整十数课件.ppt

    4. **实际应用举例**:在公园门票的例子中,通过计算不同颜色花朵的数量,孩子们可以学习到如何将整十数相加。例如,红花10盆加上黄花20盆,就是1个十加上2个十,即30盆。同理,黄花20盆加上紫花30盆,就是2个十加上...

Global site tag (gtag.js) - Google Analytics