猜算式

xiao哈哈哈 2017-03-16 02:59:25

题目:猜算式

你一定还记得小学学习过的乘法计算过程,比如:

273
x 15
------
1365
273
------
4095

请你观察如下的乘法算式

***
x ***
--------
***
***
***
--------
*****

星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p1.jpg)

请写出这个式子最终计算的结果,就是那个5位数是多少?

注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。

答案:40096


class Equation {
public static void main(String[] args){
int[] a = new int[6];
for (int i = 100; i < 1000; i++) {
for (int j = 100; j < 1000; j++) {
if(i*j<100000&&i*(j%10)<1000&&i*(j/10%10)<1000&&i*(j/100)<1000){
a[0] = i;
a[1] = j;
a[2] = i*(j%10);
a[3] = i*(j/10%10);
a[4] = i*(j/100);
a[5] = i*j;
if(f(a))System.out.println(i*j);
}
}
}
}
public static boolean f(int[] a){
int[] p = new int[20];
for(int i = 0; i < 6; i++){
int k = 0;
while(a[i] != 0){
p[a[i]%10] ++;
if(p[a[i]%10] > 2)return false;
a[i] /= 10;
k ++;
}
if(k<3) return false;
}
return true;
}
}
...全文
999 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
逗泥丸的平方 2017-03-16
  • 打赏
  • 举报
回复
竟然真的是40096

class Equation {
    /**
     * 计数器
     */
    static int[] c = new int[10];

    public static void main(String[] args) {
//        上 / 逐行结果
        int[] ax = new int[3];
//        下
        int[] aj = new int[3];
        int[] ar = new int[5];
//        上
        for (int i = 100; i < 1000; i++) {
//            下
            for (int j = 100; j < 1000; j++) {
                clear(c);
                if (!fillArrayThree(ax, i)) {
                    continue;
                }
                if (!fillArrayThree(aj, j)) {
                    continue;
                }
                int r = i * j;
                if (r >= 100000) {
//                    结果是五位数
                    break;
                }
                if (!fillArrayFive(ar, r)) {
                    continue;
                }
                String strA = "";
                boolean pass = true;
                for (int a : aj) {
                    int l = a * i;
//                    每行结果都不会大于1000
                    if (l >= 1000) {
                        pass = false;
                        break;
                    }
                    if (!fillArrayThree(ax, l)) {
                        pass = false;
                        break;
                    }
                    strA += l + ",";
                }
                if (pass) {
                    System.out.println(i + "," + j + "," + strA + "," + i * j);
                }
            }
        }
    }

    private static boolean fillArrayFive(int[] a, int i) {
        a[0] = i / 10000;
        a[1] = (i / 1000) % 10;
        a[2] = (i / 100) % 10;
        a[3] = (i / 10) % 10;
        a[4] = i % 10;
        return count(a[0]) && count(a[1]) && count(a[2]) && count(a[3]) && count(a[4]);
    }

    /**
     * 转换数字为数组
     *
     * @param a
     * @param i
     * @return false 已经超过2个
     */
    private static boolean fillArrayThree(int[] a, int i) {
        a[0] = i / 100;
        a[1] = (i / 10) % 10;
        a[2] = i % 10;
        return count(a[0]) && count(a[1]) && count(a[2]);
    }

    /**
     * @param i
     * @return false 已经超过2个
     */
    private static boolean count(int i) {
        c[i]++;
        return c[i] <= 2;
    }

    private static void clear(int[] c) {
        for (int i = 0; i < c.length; i++) {
            c[i] = 0;
        }
    }

}
我的代码.. 没想到这玩意 写了半个小时.. 有些地方没有太深究,应该可以写的更好看一点 不过看起来你的代码比较帅 .. 所以你是来炫耀的么
逗泥丸的平方 2017-03-16
  • 打赏
  • 举报
回复
你这个40096是正确答案吗... 我随手分解了一下. 40096 = 2^5*7*179 印象中179是质数了. 算了我等会跑一下吧
逗泥丸的平方 2017-03-16
  • 打赏
  • 举报
回复
图p1.jpg 在哪里 哈哈.. 有点枯燥的题目.. 我就路过看看

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧