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);
}
}
分享到:
相关推荐
2位数*3位数=4位数的算法 2位数*3位数=4位数的算法 java代码
四位数数字温度表四位数数字四位数数字温度表温度表四位数数字温度表
大家好 今天教大家如何给不同位数的数字排序 接下来看我操作 这里有不同位数的QQ号码 有7位-10位的 我们筛选出来7位到8位 看我操作 QQ账号和密码中间有分隔符--- 我们这里就把分隔符弄上 先把账号密码分开 然后...
大家好 今天教大家 不同位数数字如何排序 用的是这个软件 很简单 看操作 好了 排完了 从5位数到9位数 排位完成 教程结束感谢大家的观看
基于AT89S52单片机的21位数码管万年历
八位数的除八位数的精确前五位数除法(完美版)......................................................................................
八位数的除八位数的精确五位数除法(完美版一).......................................................................................
易语言循环取位数源码,循环取位数,取位数
8位数组转成16位数组,使用串口通信,将一个字节转成2个字节数组,可以任意设定数组的大小,只要是单个字节的2的倍数就行。简单的小程序,方便实用。
21-8位数码管显示其中之一(51单片机C语言实例Proteus仿真和代码)21-8位数码管显示其中之一(51单片机C语言实例Proteus仿真和代码)21-8位数码管显示其中之一(51单片机C语言实例Proteus仿真和代码)21-8位数码管显示其中...
1位数码管1位数码管1位数码管1位数码管1位数码管
本程序可以在2秒钟之类求出21位数的所有水仙花数
位数不足,自动填充SQL,数字前面自动补0
输入一个任意的三位数,让它们分别显示百位数和十位数和个位数。
0-9任意四位数数位排列,EXCL文档格式下载,好东西啊
一个乘法算式,用1-9,9个数字组成一个四位数乘一位数得一个四位数的算式,其中每个数字只能用一次且不重复
ADC有效位数的测量.pdf
2位数乘2位数计算试题直接打印版[收集].pdf
大数计算器 10000位大数计算器(显示位数)
易语言检测系统位数源码,检测系统位数,isWow64,GetCurrentProcess,GetSystemDirectory,IsWow64Process,LoadLibrary,GetProcAddress,FreeLibrary