`
universsky
  • 浏览: 99518 次
文章分类
社区版块
存档分类
最新评论

求解所有21位水仙花数------经典问题和算法分析

 
阅读更多

这里我主要是换个思路,穷举这个数中的每个位置上的数字的总数。从一开始,我们假设共有该数中存在9个9,我们将这个数的信息存到几个特定的数组中去:

Java代码

  1. privateint[]countArray=newint[10];//个数列表
  2. privateint[]countSumArray=newint[10];//个数总数
  3. privateBigInteger[]sumArray=newBigInteger[10];//值总数
  4. 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秒种,多线程的意义也就不复存在了。

分享到:
评论

相关推荐

    21位水仙花数JAVA代码

    对于21位的水仙花数而言,它需要满足以下条件:所有位上的数字的21次幂之和等于该数本身。这类数非常罕见,由于其位数较多,因此计算上存在一定的挑战性。 ### 二、21位水仙花数的求解方法 #### 1. 基本思路 由于...

    4.4日作业第三章_水仙花数_

    在编程求解水仙花数时,效率是一个重要的考虑因素。可以采用优化策略,比如使用位操作减少计算次数,或者利用已知的水仙花数范围进行优化。此外,为了提高代码的可读性和可维护性,良好的编程实践如注释、变量命名...

    root-music2.rar_ROOT_root-music_水仙花数MATLAB

    在编程学习的道路上,"水仙花数"是一个经典的入门问题,它不仅是对初学者控制结构、循环和数学运算能力的考验,同时也是对更高级编程技巧的铺垫。 水仙花数,又称为自恋数或阿姆斯特朗数,是一个在数学和计算机编程...

    七种方法求水仙花数.docx

    在计算机编程中,求解水仙花数是一种常见的算法练习,可以用于学习和演示并行计算技术。 1. **解决方案**: - 一个简单的串行解决方案是遍历100到999之间的所有数,通过分别获取百位、十位和个位,然后计算这三个...

    C语言算法合集含最大公约数、最小公倍数、猴子吃桃子、百钱百鸡问题、渔夫打鱼问题、二分查找法、分块查找法、求水仙花数、统计单词个数

    7. **水仙花数**:水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如153(1^3 + 5^3 + 3^3 = 153)。编写程序判断一个数是否为水仙花数,可以锻炼对位运算的理解和应用。 8. **统计单词个数**:在文本...

    C++经典问题算法分析[整理].pdf

    【C++经典问题算法分析】 在软件开发领域,掌握高效的算法是至关重要的。这份文档整理了几个使用C++实现的经典算法问题,包括枚举算法和递归算法的应用,这些都是编程面试和实际项目中常见的问题。 **一、百钱买...

    常见问题算法分析 算法

    【常见问题算法分析】是针对初学者的一系列算法解析,主要使用C语言进行描述,旨在帮助新手更好地理解和应用基础算法。下面将详细讲解这些常见问题及其解决方案。 **1. 水仙花数问题** 水仙花数是指一个三位数,其...

    Java 算法+例题 很多金典例题,包括兔子算法 = =

    【Java算法+例题】中的知识点主要涵盖了三个经典的算法问题,分别是兔子繁殖问题(斐波那契数列)、素数判断以及水仙花数的计算。以下是对这些知识点的详细说明: 1. **兔子繁殖问题**(斐波那契数列) - **题目...

    java经典算法大全

    一个水仙花数是指一个三位数,它各位数字的立方和等于该数本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。在Java程序中,我们通常通过循环遍历所有三位数,对每个数进行拆分,然后判断其是否符合水仙花...

    算法与数据结构综合应用——典型竞赛试题分析

    水仙花数是指一个三位数,其各位数字立方和等于该数字本身。这是一个典型的数值计算问题,需要使用循环和条件语句来实现。 2. 找出 1000 以内的所有完数 完数是指一个数恰好等于它的因子之和。这是一个典型的数值...

    经典的100个c算法

    代码示例通过遍历100至999之间的所有数字,并计算每位数字的立方和来检查哪些数是水仙花数,最终打印出所有的水仙花数。 ### 4. 因数分解 因数分解是将一个正整数表示为其质因数乘积的过程。在C语言中,可以使用...

    java算法练习题 大家下载看看啦

    - **描述**:水仙花数是指一个三位数,它的每个位上的数字的立方和等于它本身。 - **实现思路**: - 使用`for`循环遍历100到999之间的所有数字。 - 对于每一个数字,分别提取出百位、十位和个位上的数字。 - 计算...

    100个经典例题(C语言).doc

    通过循环和条件判断找到所有符合条件的水仙花数。 #### 【程序14】将一个正整数分解质因数 - **知识点**: - 质数检测 - 循环结构 - **描述**:将一个正整数分解为其质因数的乘积形式。 #### 【程序15】利用条件...

    Java50道经典题目

    - **知识点**: 水仙花数是指一个三位数,其各位数字立方和等于该数本身(如153 = 1^3 + 5^3 + 3^3)。 - **实现方法**: - 遍历100到999之间的所有三位数。 - 对每个数进行分解,分别计算百位、十位、个位数字。 -...

    JAVA经典算法40题.pdf

    文档中的代码通过分解一个整数的百位、十位和个位数字,然后进行立方和的计算来判断一个数是否为水仙花数。 在文档中还看到了对“完全数”(Perfect Number)的检测。完全数是指一个数恰好等于它的因子之和(不包括...

    100个经典例题(C语言)-共63页.pdf100个经典例题(C语言)-共63页_.pdf

    - **算法实现**:编写代码来找出所有符合条件的水仙花数。 ### 14. 正整数分解质因数 #### 知识点: - **质因数分解原理**:掌握如何将一个正整数分解为其质因数的乘积。 - **优化算法**:探讨如何提高质因数分解的...

    JAVA经典算法40题.doc

    水仙花数是另一个有趣的数学概念,它指的是一个三位数,其各位数字的立方和等于该数本身。例如153就是一个水仙花数(1^3 + 5^3 + 3^3 = 153)。文档中的程序3通过`math`类中的`shuixianhua`方法来判断一个数是否为...

    JAVA练习题(50题)

    - “水仙花数”定义:一个三位数,其各位数字立方和等于该数本身。 - 数字分解与重组。 - 条件判断语句。 - **实现思路**:遍历100至999之间的所有数字,并检查每个数是否满足“水仙花数”的定义。 #### 练习题4...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    9.4.2 计算水仙花数算法 281 9.5 自守数 283 9.5.1 自守数概述 283 9.5.2 计算自守数算法 284 9.6 最大公约数 287 9.6.1 计算最大公约数算法——搌转相除法 287 9.6.2 计算最大公约数算法一一Stein算法 288 ...

Global site tag (gtag.js) - Google Analytics