算法练习-求21位数的水仙花数
2016-03-11 14:11
471 查看
问题描述:在三分钟内求出所有的21位水仙花数
直接上代码:
直接上代码:
[code]public class 求21位数的水仙花数 { /** * @param args */ public static void main(String[] args) { long startTime=System.currentTimeMillis();//程序开始时间 BigInteger pw[]=new BigInteger[10]; for(int i=0;i<pw.length;i++){ pw[i]=p(i);//每个下标存0~9的21次方 } int nn[]=new int[10];//统计各个数字的出现次数 f(pw,nn,0,0); System.out.println("OK"); long endTime=System.currentTimeMillis();//程序结束时间 System.out.println((endTime-startTime)/1000f); } private static void f(BigInteger[] pw, int[] nn, int cur, int use) { if(cur==9){ nn[9]=21-use;//将当前位置的数字的次数减去使用次数 ji_suan(pw,nn);//判断是不是水仙花数,是的话输出 return; } //当前位置所有可能枚举 for(int i=0;i<21-use;i++){ /*从第一个位置开始遍历,21-use减少遍历次数,减去已用过的位置如: 第一次大遍历,i=0,use=0时 第一次cur==9时,nn表中数据为:0,0,0,0,0,0,0,0,0,21 每次递归除了第一个0不变,其他位递归,且相加为21, 第二次大遍历,i=1,use=0时 第一次cur==9时,nn表中数据为:1,0,0,0,0,0,0,0,0,20 每次递归除了第一个1不变,其他位递归,且相加为20,21-use(use此时为1) 21-use就是这个意思 * */ nn[cur]=i;//0~9出现的次数 f(pw, nn, cur+1, use+i);//pw:每个数字的21次方,nn:每个数字出现的次数,cur:当前数字,use:当前位置数字个数已使用的次数 } } private static void ji_suan(BigInteger[] pw, int[] nn) { BigInteger sum=BigInteger.ZERO; for(int i=0;i<10;i++){ sum=sum.add(pw[i].multiply(BigInteger.valueOf(nn[i]))); } String string=""+sum; if(string.length()!=21) return; //确定各数字出现多少次 int[] nn2=new int[10]; for(int i=0;i<21;i++){ nn2[string.charAt(i)-'0']++; } for(int i=0;i<10;i++){ if(nn[i]!=nn2[i]) return; } System.out.println(string); } private static BigInteger p(int i) { BigInteger base=BigInteger.valueOf(i); return base.pow(21); } }
相关文章推荐
- 详细解析Raid0、Raid0+1、Raid1、Raid5四者的区别
- 微服务架构在Netflix的应用:架构设计的经验教训
- spark rdd转dataframe 写入mysql的示例
- CSS样式实现溢出超出DIV边框宽度高度的内容自动隐藏方法
- PHP 基础笔记
- Java 使用 JRegistry-1.8.1 读取和设置 windows 注册表
- SQL Server 基础:Cast和Convert的区别
- JavaWeb项目动态导出Excel可弹出下载(基于POI和java反射机制,可选择导出项,读取数据库注释作为表头,可合计)
- 收集Web前端 面试题 Javascript部分
- 【行人检测】之Joint Deep Learning联合深度学习(附源码)
- Arctic Network uva10369
- 说说Spring中的WebDataBinder
- Linux创建动态库和静态库
- Java 获取最近时间
- Python支持的数据结构
- swift 常用的小句代码
- UIScrollView偏移问题
- 高级子查询(嵌套查询)和(相关子查询)
- php小知识点
- 行人检测最新论文简介