栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 032. 全数字乘积

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 032. 全数字乘积

全数字乘积
如果一个 n 位数使用了 1 到 n 中每个数字且只使用了一次,我们称其为全数字。例如,
15234 这个五位数,是 1 到 5 全数字的。
7254 是一个不寻常的数,因为:39 × 186 = 7254 这个算式的乘数,被乘数和乘积组成了
一个 1 到 9 的全数字组合。
找出所有能够组合成 1 到 9 全数字的乘法算式中乘积的和。
提示: 有的乘积数字能够被多个乘法算式得到,所以在计算时要记得只计算它们一次。
答案:45228
可能的情况:一位乘以四位等于四位,二位乘以三位等于四位
代码如下:

static int[]a=new int[10000];
    public static int add(){
        int t=0,m;
        for(int i=2;i<=9;i++){
            for(int j=1000;j<=9999;j++){
                if(j%10==i||j/10%10==i||j/100%10==i||j/1000%10==i)
                    continue;
                else {
                    m=i*j;
                    if(judge(i,j,m)&&a[m]!=-1){
                        t+=m;
                        a[m]=-1;
                        System.out.println(i+" "+j+" "+m);
                    }
                }
            }
        }
        for(int i=10;i<=99;i++)
            for(int j=100;j<=999;j++){
                String s1=Integer.toString(i),s2=Integer.toString(j);
                String s=s1+s2;
                Set set = new HashSet();
                char[] chars = s.toCharArray();
                for(char c:chars) {
                    set.add(c);
                }
                if(s.length()!= set.size()) continue;
                m=i*j;
                if(judge(i,j,m)&&a[m]!=-1){
                    t+=m;
                    a[m]=-1;
                    System.out.println(i+" "+j+" "+m);
                }
            }
        return t;
    }
    public static boolean judge(int i,int j,int m){
        String s1=Integer.toString(i),s2=Integer.toString(j),s3=Integer.toString(m);
        String s=s1+s2+s3;
        if(s.length()!=9) return false;
        Set set = new HashSet();
        char[] chars = s.toCharArray();
        for(char c:chars) {
            if(c=='0') return false;
            set.add(c);
        }
        return (set.size()==s.length());
    }
    public static void main(String[] args) {
        System.out.println(add());
    }

程序运行结果:

可参考代码:

import java.util.Arrays;
public class p032 {
 public String run() {
 int sum = 0;
 for (int z = 1; z < 10000; z++) {
 if (hasPandigitalProduct(z))
 sum += z;
 }
 return Integer.toString(sum);
 }
 private static boolean hasPandigitalProduct(int z) {
 for (int x = 1; x <= z; x++) {
 //先找到 z 的所有因子 x,把 x,z/x(即 y),z 连接起来进行判断,如果是全数字乘积则 true
 if (z % x == 0 && isPandigital("" + x + z/x + z))
 return true;
 }
 return false;
 }
 //判断字符串 s 是否是全数字串(思路:先转化为字符数组,然后排序,再恢复成串,和"123456789"进
行比较即可)
 private static boolean isPandigital(String s) {
 if (s.length() != 9)
 return false;
 char[] temp = s.toCharArray();
 Arrays.sort(temp); //字符数组从小到大排序
 return new String(temp).equals("123456789");
 }
 public static void main(String[] args) {
 System.out.println(new p032().run());
 }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/716632.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号