您的位置:程序门 -> java -> j2se / 基础类



一个小学生的问题.


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


一个小学生的问题.[已结贴,结贴人:iwillfling]
发表于:2007-02-10 12:24:38 楼主
公式是

[]   []   []   []   *   []   =   []   []   []   []

这九个空,分别填入1~9   9个数字,要求不能重复.
简单的说就是一个前面是四位数,后面是四位数,用到1~9要求等式成立.
用java怎么实现?
发表于:2007-02-10 12:30:561楼 得分:0
我学前班还没毕业呢
发表于:2007-02-10 12:34:362楼 得分:0
我刚能做出个基本的swing别的还不会
发表于:2007-02-10 12:36:093楼 得分:0
九层循环,哈哈...
发表于:2007-02-10 13:18:424楼 得分:0
2重循环,1234--9876     2-8,先判断前5个数的重复,不重复求出乘积再判断一下就好了,最多也不到5千次,问题不大了,有兴趣优化继续用数学方法研究也行
发表于:2007-02-10 13:31:425楼 得分:0
hoho。找个数学系的人来算算。找找算法。。。
发表于:2007-02-10 20:56:336楼 得分:20
答案是:
1738×4=6952
1963×4=7852

我算法没有优化,9重循环......
//by   wizim
//[]       []       []       []     *     []       =   []       []       []       []
//↓         ↓         ↓         ↓             ↓             ↓         ↓         ↓         ↓  
//i[1]   i[2]   i[3]   i[4]       i[0]       i[5]   i[6]   i[7]   i[8]


class   test
{
private   static   boolean   chongfu(int[]   z)
{
int   i,j;
for(i=0;i <=z.length-1;i++)
{
for(j=i+1;j <=z.length-1;j++)
{
if(z[i]==z[j])
return   true;
}
}
return   false;
}
public   static   void   main(string[]   args)
{
int[]   i=new   int[9];
for(i[0]=1;i[0] <=9;i[0]++)
{
for(i[1]=1;i[1] <=9;i[1]++)
{
for(i[2]=1;i[2] <=9;i[2]++)
{
for(i[3]=1;i[3] <=9;i[3]++)
{
for(i[4]=1;i[4] <=9;i[4]++)
{
for(i[5]=1;i[5] <=9;i[5]++)
{
for(i[6]=1;i[6] <=9;i[6]++)
{
for(i[7]=1;i[7] <=9;i[7]++)
{
for(i[8]=1;i[8] <=9;i[8]++)
{
if((i[1]*1000+i[2]*100+i[3]*10+i[4])*i[0]==i[5]*1000+i[6]*100+i[7]*10+i[8])

if(!chongfu(i))
{
system.out.println(string.valueof(i[1])+string.valueof(i[2])+string.valueof(i[3])+string.valueof(i[4])+ "* "+string.valueof(i[0])+ "= "+string.valueof(i[5])+string.valueof(i[6])+string.valueof(i[7])+string.valueof(i[8]));
}
}
}
}
}
}
}
}
}
}
}
}
发表于:2007-02-10 22:40:567楼 得分:0
这个问题还真有难度啊。。
想了一个最sb的办法,先把1-9全排列,然后一个一个验证。
发表于:2007-02-10 22:58:358楼 得分:0
learnning
发表于:2007-02-10 23:51:599楼 得分:0
9重循环啊...汗

这样:
import   java.util.arrays;
public   class   test{
    public   static   void   main(string   args[]){
        int   temp;
        string[]   s;
        string[]   result   =   { " ", "1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 "};
        for(int   i=1234;i <6789;i++){
            for(int   j=1;j <9;j++){
                temp   =   i*j;
                if(temp> 10000)
                    continue;
            s   =   (i+ " "+j+temp).split( " ");
            arrays.sort(s);
            if(arrays.equals(s,result))
                system.out.println(i+ "x "+j+ "= "+temp);
            }
        }
    }
}
发表于:2007-02-11 13:06:5210楼 得分:0
楼上的算法确实比我的牛鼻!学习^_^
发表于:2007-02-11 15:40:2411楼 得分:0
学习
发表于:2007-02-11 22:26:4812楼 得分:0
学习
发表于:2007-02-12 08:01:1713楼 得分:0
kbt1985()   (   )   信誉:100         blog     2007-2-10   22:40:56     得分:   0    
这个问题还真有难度啊。。
想了一个最sb的办法,先把1-9全排列,然后一个一个验证。
-----------------------------------
计算机本来就是sb,这个办法不是sb的办法,这是计算机常用的枚举法啊.其实就是他们的九重循环.
发表于:2007-02-12 12:18:4614楼 得分:0
zapdos说说你是如何想到地呗。。。你像我们指定都得是9个循环,你是从何入手地,怎样思考地能说一下吗。。谢谢了。
发表于:2007-02-12 14:23:1515楼 得分:0
这个么,应该是熟能生巧吧,这类型的东西做得多了,就会想出其他方法来了,跟做中、小学的数学题一样,我也说不清楚,反正灵感一来就出来了
发表于:2007-02-12 17:13:0016楼 得分:0
zapdos()  
for(int   i=1234;i <6789;i++){


为什么不是i <9876
???
发表于:2007-02-12 17:46:4217楼 得分:0
不好意思,一时大意,写错了,应该是9876
发表于:2007-02-12 18:56:3018楼 得分:0
这个应该是9个数的排列吧.
把9个数全排列一遍
每次if(前四个数*第5个数=后4个数){
输出..
}
时间复杂度为n!(这里是9)




快速检索

最新资讯
热门点击