枚举算法(Enumeration algorithm)实例一

(建议电脑看原文链接,平台的排版不太好,太累了。)描述:在n位的整数中,例如153可以满足1^3 + 5^3 + 3^3 = 153,这样的数称之为Armstrong数。

将所有的Armstrong数按小到大排序,试写出一程序找出n位数以下的所有Armstrong数,网上大多数是已知位数求确定位数下的Armstrong数,本题在此基础上提高了一定的难度。

手机浏览图片,电脑用户浏览下面的代码

/**
 * @Author: zhaoyaojing
 * @Email: null
 * @Date: 02/02/2018
 * @Time: 8:53 PM
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ArmstrongNum {
    public ArmstrongNum(){
    }

    /**
     * 枚举法
     * 求n位数以下的所有Armstrong数,也就是10的(n+1)次幂以下的数
     */
    public void getAllArmstrongNum1(int n){

        //从1开始到10的n次幂
        for(int i = 1; i < (int) Math.pow(10, n); i++){

            //sum表示一个i位数等于其个位数的i次方之和,i小于等于n。
            int sum = 0;

            //把每个数查分成i个个位数,放在数组里
            int[] mun = new int[n];

            //获得当下查询值
            int thisNum = i;

            //j为当下查询值的位数
            int j = 0;

            //得到一个存放当下数每位上的数的数组mun
            while (thisNum > 0){
                mun[j] = thisNum % 10;
                thisNum = thisNum / 10;
                ++j;
            }

            //求得sum
            for(int k = 0; k < n; k++){
                sum = sum + (int)Math.pow(mun[k], j);
            }

            //如果i属于Armstrong数,则输出,以一个空格为间隙。
            if(i == sum){
                System.out.print(i + " ");
            }
        }
    }

    public static void main(String[] args) throws Exception, IOException {
        // TODO Auto-generated method stub
        ArmstrongNum armstrongNum = new ArmstrongNum();
        System.out.print("求n位数以下的Armstrong数,请先输入n的值:\n");

        //输入n
        int n = Integer.parseInt(new BufferedReader
                (new InputStreamReader(System.in)).readLine());

        //得到n位数以下的所有Armstrong数
        armstrongNum.getAllArmstrongNum1(n);
    }
}
求n位数以下的Armstrong数,请先输入n的值:
5
1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084

原文发布于微信公众号 - 数据库SQL(SQLdba)

原文发表时间:2018-02-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

让你比95%的人更懂Pythonic的内置模块:collections

Python的集合(collections)模块,为很多用其他方法很难实现的场景提供了解决方案。 本文我们将会学习该模块的抽象概念是如何产生的,日后处理不同问题...

1915
来自专栏aCloudDeveloper

从一个集合中查找最大最小的N个元素——Python heapq 堆数据结构

Top N问题在搜索引擎、推荐系统领域应用很广, 如果用我们较为常见的语言,如C、C++、Java等,代码量至少也得五行,但是用Python的话,只用一个函数就...

21510
来自专栏奇点大数据

Scala语言学习笔记一

Scala是一门小众的语言,但是作者因为工作原因要以Spark作为工作中的一个重心,而Spark采用了Scala语言编写,于是萌生了认真学习Scala的念头,在...

3604
来自专栏叁金大数据

自学Python六 爬虫基础必不可少的正则

  要想做爬虫,不可避免的要用到正则表达式,如果是简单的字符串处理,类似于split,substring等等就足够了,可是涉及到比较复杂的匹配,当然是正则的天下...

731
来自专栏北京马哥教育

深入 Python 字典的内部实现

字典是通过键(key)索引的,因此,字典也可视作彼此关联的两个数组。下面我们尝试向字典中添加3个键/值(key/value)对: 这些值可通过如下方法访问: 由...

35215
来自专栏微信公众号:Java团长

Java集合框架综述

最近打算复习复习JDK中的集合框架,并尝试分析其源码,这么做一方面是这些类非常实用,掌握其实现能更好的优化我们的程序;另一方面是学习借鉴JDK是如何实现了这么一...

903
来自专栏Modeng的专栏

Javascript数组系列一之栈与队列

所谓数组(英语:Array),是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。 组成数组的各个变量称为数组的分量,也称为数组的元素...

1255
来自专栏微信公众号:Java团长

探秘Java中的String、StringBuilder以及StringBuffer

  相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String、StringBuilde...

732
来自专栏Albert陈凯

编译型语言、解释型语言、静态类型语言、动态类型语言、强类型语言、弱类型语言概念与区别

编译型语言和解释型语言 1、编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(li...

41411
来自专栏小樱的经验随笔

数据结构学习笔记【持续更新】

数据结构概述:   定义:     我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到保存到主存储器(内存)中,     以及在此基础上为实...

2243

扫码关注云+社区