论无聊的人做什么:模仿游戏

作者: 文十言 | 来源:发表于2015-01-25 23:46 被阅读358次

    前几天看到同学在微博分享了一页逻辑题,大概是这样的:

    fcfa94eef01f3a290220153a9a25bc315e607c8c.jpg

    粗略看了一下,确实费脑筋。年纪大了本不想动脑子,可今天突发奇想,干脆用电脑暴力破解吧!

    这种题如果动脑子想,首先是个费时间的活儿,一般这类题是没有特别明显的突破口的,总是或多或少的需要人脑去试错,不但考验逻辑推理,记忆力不行还会崩溃。既然如此,干脆穷举试错,这道题一共4^10=1048576种答案,反正cpu不会缺氧(图灵破解英格玛是个啥感觉!)。

    打开eclipse,突然有点小迷茫。本想用数组的方式,先将这1048576种答案列好,然后用4进制的形式表达。先不说之后怎么试错,光转换4进制就难住我了。思索了15分钟,索性直接用了10个for。。。

    接下来开始按照题目(a0-a9代表1-10题的答案,0-3代表abcd)编辑各种套娃式的if语句,第一题写出来等于废话,略过;从第2题开始到第6题及其顺畅,非常明显的“或且非”,5分钟搞定,而且没完成一个答案个数都是指数型递减;第7题感觉略显复杂,没关系,不爱动脑就用笨方法,函数式编程,花5分钟做函数,搞定。

    此时再一次测试,发现当初那100多万个答案只剩下两个了:

    3EC7D422-DBDC-4548-AE7A-559FCFFEAFB8.png

    代表BCACACDABA和DCACACBADA(从0开始数数!)。随后发现还没有编进去的8、9、10题中8、10题答案是一样的,外加没有写进去的第1题,发现这套题实际有用条件只有2、3、4、5、6、7、9几个。看看时间不早,还有电视剧要赶,于是取巧只把第9题写了进去,得到最终答案BCACACDABA。

    最后附上代码,呵呵。。。

    public class Main {
        public static int question7(int a0,int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9)
        {
            int[] a=new int[10];
            a[0]=a0;a[1]=a1;a[2]=a2;a[3]=a3;a[4]=a4;a[5]=a5;a[6]=a6;a[7]=a7;a[8]=a8;a[9]=a9;
            int count0=0;int count1=0;int count2=0;int count3=0;
            for(int i=0;i<10;i++)
            {
                if(a[i]==0)
                    count0++;
                if(a[i]==1)
                    count1++;
                if(a[i]==2)
                    count2++;
                if(a[i]==3)
                    count3++;
            }
            if(count0<=count1&&count0<=count2&&count0<=count3)
                return 0;
            if(count1<=count0&&count1<=count2&&count1<=count3)
                return 1;
            if(count2<=count0&&count2<=count1&&count2<=count3)
                return 2;
            if(count3<=count0&&count3<=count1&&count3<=count2)
                return 3;
            return 0;
        }
        
        public static void main(String[] args) {
            int a0;int a1;int a2;int a3;int a4;int a5;int a6;int a7;int a8;int a9;
            for(a0=0;a0<4;a0++)
            {
                for(a1=0;a1<4;a1++)
                {
                    for(a2=0;a2<4;a2++)
                    {
                        for(a3=0;a3<4;a3++)
                        {
                            for(a4=0;a4<4;a4++)
                            {
                                for(a5=0;a5<4;a5++)
                                {
                                    for(a6=0;a6<4;a6++)
                                    {
                                        for(a7=0;a7<4;a7++)
                                        {
                                            for(a8=0;a8<4;a8++)
                                            {
                                                for(a9=0;a9<4;a9++)
                                                {
                                                    if((a1==0&&a4==2)||(a1==1&&a4==3)||(a1==2&&a4==0)||(a1==3&&a4==1))//2
                                                    {
                                                        if((a2==a5&&a5==a1&&a3!=a2&&a2==3)||(a2==a5&&a5!=a1&&a3==a2&&a2==2)||(a2!=a5&&a5==a1&&a3==a1&&a2==0)||(a2!=a5&&a2==a1&&a3==a2&&a2==1))//3
                                                        {
                                                            if((a3==0&&a0==a4)||(a3==1&&a1==a6)||(a3==2&&a0==a8)||(a3==3&&a5==a9))//4
                                                            {
                                                                if((a4==0&&a7==a4)||(a4==1&&a3==a4)||(a4==2&&a4==a8)||(a4==3&&a4==a6))//5
                                                                {
                                                                    if((a5==0&&a7==a1&&a7==a3)||(a5==1&&a7==a0&&a7==a5)||(a5==2&&a7==a2&&a7==a9)||(a5==3&&a7==a4&&a7==a8))//6
                                                                    {
                                                                        if((a6==0&&question7(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)==2)||(a6==1&&question7(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)==1)||(a6==2&&question7(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)==0)||(a6==3&&question7(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)==3))//7
                                                                        {
                                                                            if((a8==0&&((!(a0==a5))==(a4==a5)))||(a8==1&&((!(a0==a5))==(a4==a9)))||(a8==2&&((!(a0==a5))==(a4==a1)))||(a8==3&&((!(a0==a5))==(a4==a8))))//9
                                                                            System.out.println(a0+""+a1+""+a2+""+a3+""+a4+""+a5+""+a6+""+a7+""+a8+""+a9);
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    相关文章

      网友评论

      本文标题:论无聊的人做什么:模仿游戏

      本文链接:https://www.haomeiwen.com/subject/ojskxttx.html