这里我主要是换个思路,穷举这个数中的每个位置上的数字的总数。从一开始,我们假设共有该数中存在9个9,我们将这个数的信息存到几个特定的数组中去:
Java代码
- privateint[]countArray=newint[10];//个数列表
- privateint[]countSumArray=newint[10];//个数总数
- privateBigInteger[]sumArray=newBigInteger[10];//值总数
- privateintoffset=0;//浮标
private int[] countArray = new int[10]; // 个数列表
private int[] countSumArray = new int[10]; // 个数总数
private BigInteger[] sumArray = new BigInteger[10];// 值总数
private int offset = 0;// 浮标
countArray记录依次从9到0每个数的个数,countSumArray是countArray中的各个数与其之前所有数的个数的总和(即countSumArray[n]=countSumArray[n-1]+countNum),sumArray是当前数的总值(即sumArray[n]=sumArray[n-1]+num)。offset是浮标,即当前判定的数的位置
我们对该个数进行判断,9个9后面还有12位数,那么9个9最小就是9个9的平方+12个0的平方,最大是9个9的平方+12个8的平方。我们从以下三个方面来判断:
1. 最小值不大于999999999999999999999
2. 最大值不小于100000000000000000000
3. 最大值与最小值从首部是否相同的部分,如777700000000000000000与777799999999999999999,存在7777相同的部分,如果该相同的部分中有某个数的个数大于offset中相同的值的个数,那么该值也判定为失败
还有一个很重要的判断就是,如果countSumArray中对应的offset中的值为21,那么即所有的位数都有值,那么直接判定如果该值=其各个位置上的数的21次方之和,如果不等返回失败,反之,这个数就是要求的数。
总体判断如上所述,如果失败我们即查询下一个数next(),countSumArray[offset]=21,那么就是查到头了,就返回查找back()。
用到了几个技巧,就是将BigInteger的运算结果直接存储到hashtable中去,可以节约大量运算时间。题中给予了4分钟的时间,以为很需要一段时间,就设置了多线程,后来发现,不使用多线程也只要花费2秒种,多线程的意义也就不复存在了。
分享到:
相关推荐
Frank-Wolfe算法是用于求解交通流量分配问题的经典算法,但该算法是基于路段(Link-Based)的交通流量分配算法,无法用于求解路径交通流量。针对此问题,提出一种用于求解路径交通量的改进Frank-Wolfe算法。通过在...
算法与算法分析 - 01 算法问题求解基础.pdf
C语言中的水仙花数,是指一个 n 位数,它的每个位上的数字的n次方之和等于它本身。比如,153就是一个水仙花数,因为 1^3 + 5^3 + 3^3 = 153,这样的数字在数学上称为“自幂数”。 水仙花数是一类数学上的现象,有着...
经典算法问题-TSP商旅问题(Traveling Salesman Problem),它是数学领域中著名问题之一。...代码包含遗传算法和动态规划来求解这个问题,里面有完整源代码,并且有详细注释,还有两者的比较分析。
西南交通大学-算法分析与设计实验8.1和8.2.docx西南交通大学-算法分析与设计实验8.1和8.2.docx西南交通大学-算法分析与设计实验8.1和8.2.docx西南交通大学-算法分析与设计实验8.1和8.2.docx西南交通大学-算法分析与...
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 程序分析:利用for循环控制100-999个数,每...
Matlab求解非线性超定方程组-恰定方程组-欠定方程组.docx.pdfMatlab求解非线性超定方程组-恰定方程组-欠定方程组.docx.pdfMatlab求解非线性超定方程组-恰定方程组-欠定方程组.docx.pdfMatlab求解非线性超定方程组-恰...
2.采用分治法求解最大连续子序列和问题 给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。 例如: 序列(-2,11,-4,13,-5,-2)的最大子序列和为20序列; (-6,2,4,-7,5,3,2,-1,6,...
遗传算法求解0-1背包问题matlab代码
Matlab求解非线性超定方程组-恰定方程组-欠定方程组.pdfMatlab求解非线性超定方程组-恰定方程组-欠定方程组.pdfMatlab求解非线性超定方程组-恰定方程组-欠定方程组.pdfMatlab求解非线性超定方程组-恰定方程组-欠定...
Matlab求解非线性超定方程组-恰定方程组-欠定方程组.docxMatlab求解非线性超定方程组-恰定方程组-欠定方程组.docxMatlab求解非线性超定方程组-恰定方程组-欠定方程组.docxMatlab求解非线性超定方程组-恰定方程组-欠...
遗传算法求解0-1背包模型的MATLAB代码
Matlab求解非线性超定方程组-恰定方程组-欠定方程组.docx.docxMatlab求解非线性超定方程组-恰定方程组-欠定方程组.docx.docxMatlab求解非线性超定方程组-恰定方程组-欠定方程组.docx.docxMatlab求解非线性超定方程组...
matlab遗传算法求解0-1背包问题.zip
基于遗传算法的求解0-1背包问题基于遗传算法的求解0-1背包问题基于遗传算法的求解0-1背包问题
大数据-算法-树算法求解旅行商问题
一种改进的模拟退火算法求解0-1背包问题
遗传算法求解混合流水车间调度问题
计算机问题求解–论题2-8-概率分析与随机算法.pptx
分支定界算法求解0-1背包问题(附MATLAB代码) 1.0-1背包问题描述 2.数学模型 3.线性规划松弛最优解 4.实例讲解 5.MATLAB代码