• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 21位水仙花数。

21位水仙花数。

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了n位水仙花数,水仙花数是几位的,水仙花数,水仙花数 c语言,水仙花数编程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:21位水仙花数。
描述:

N=21时,所有满足条件的花朵数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。也就是21的水仙花数。希望解释下算法。枚举的方法有点没有理解,请高手详细解释下。


解决方案1:

/**
 * 这是蓝桥杯java组往届中的一道题目,蓝桥杯官网上有详细的讲解
 * 主要是把问题转化为0~9出现次数和为21位数进行递归遍历和选择
 * 还有涉及大数据处理时候使用 BigInteger 类来处理。
 * 以下是根据官网上的讲解所写的代码,望对你有帮助
 */
import java.math.BigInteger;
public class Sxh {
    //初始化0~9的21次方
    static BigInteger []arr = new BigInteger[10];

    //判断21位数0~9出现次数是否和分配的次数一致
    public static boolean check(String str,int []jl)
    {
        int ar[] = {0,0,0,0,0,0,0,0,0,0};

        for(int i=0;i<21;i++)
            ar[str.charAt(i)-'0']++;
        for(int i=0;i<10;i++)
        {
            if(ar[i]!=jl[i])
                return false;
        }
        return true;
    }
    //times-->纪录当前分配数字   sy--剩余分配数      sum--当前总和   jl--纪录0~9每个数字分别占几次
    public static void bl(int times,int sy,BigInteger sum,int []jl){
        //若分配到数字9
        if(times==9)
        {
            sum = sum.add(arr[9].multiply(new BigInteger(String.valueOf(sy))));
            String str = sum.toString();
            //若当前和不为21位return
            if(str.length()!=21)
                return;
            jl[9] = sy;
            //若21位数0~9出现次数是否和分配的次数不一致,return
            if(!check(str,jl))
                return;
            //否则成立,输出结果
            System.out.println(str);
            return;
        }
        for(int i=0;i<=sy;i++)
        {
            jl[times]=i;
            BigInteger j = arr[times].multiply(new BigInteger(String.valueOf(i)));
            bl(times+1,sy-i,sum.add(j),jl);
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //初始化0~9的21次方
        for(int i=0;i<10;i++)
            arr[i] = new BigInteger(String.valueOf(i)).pow(21);
        //初始化纪录0~9每次出现次数的数组
        int []jl = {0,0,0,0,0,0,0,0,0,0};
        bl(0,21,BigInteger.ZERO,jl);
    }
}

解决方案2:

答案范围是闭区间 [0{21}, 9{21}] 的一个子集 枚举法就是遍历这个区间的整数,将符合结果的答案输出。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 21位水仙花数。

相关文章

  • 2017-06-07 python爬虫python标准库partial代码
  • 2017-06-07 (VFP)复制一SQL表后,如何让主键重新计数
  • 2017-06-07 jboss510jnp访问localhost可以,本机ip不可以
  • 2017-06-07 七牛云绑定自定义域名,使用绑定后的域名访问图片出现乱码,
  • 2017-06-07 python27中有asyncfor的等价表达方式吗?
  • 2017-06-07 有没有在线提供pdf等文件存储api接口的网站
  • 2017-06-07 递归里面用return了,那么函数遇到return就不走了,是不是就不用归了?
  • 2017-06-07 求前辈给成长建议(怎样提高技术职业素养)
  • 2017-06-07 androidstudio如何导入七牛云存储借口??
  • 2017-06-07 (python)?P<sign>中的p是什么意思呢

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • macos下修改文件的权限出现下面的问题怎么办?
    • python中删除csv文件的某一列,可是每次删除得到的文件大小都不一样,请问大神们是为什么?代码该如何修改呢?
    • 内容管理中文件内容更新不成功?
    • (python)为何print(my)还会输出小写的x,y,z?为何输出的不是字符串?
    • hibernate框架总是出现数据连接错误,不频繁发生
    • python登陆成功之后保持登陆状态,在网站在爬去数据?
    • tornado模板中如何使用datetimedatimestrptime函数
    • python菜鸟问一个print的问题
    • 有没有类似一路向西的电影sparkcore有没有类似连表查询的操作
    • windows下用python3写udp端口探测时,使用SOCK_RAW没有root权限怎么办?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有