免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jiliu66
打印 上一主题 下一主题

三个java超级变态逻辑循环编程题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-07-13 10:23 |只看该作者
2:

  1. public class HuiYi{
  2.    public static void main(String [] args){
  3.       HuiYi.t1();
  4.    }   
  5.   
  6.    private static void t1(){
  7.       for(int a1=1;a1<=2;a1++){
  8.          for(int a2=1;a2<=2;a2++){
  9.             for(int a3=1;a3<=2;a3++){
  10.                for(int a4=1;a4<=2;a4++){
  11.                   for(int a5=1;a5<=2;a5++){
  12.                      for(int a6=1;a6<=2;a6++){
  13.                         
  14.                         if(
  15.                            tm1(a1,a2,a3,a4,a5,a6)
  16.                            && tm2(a1,a2,a3,a4,a5,a6)
  17.                            && tm3(a1,a2,a3,a4,a5,a6)
  18.                            && tm4(a1,a2,a3,a4,a5,a6)
  19.                            && tm5(a1,a2,a3,a4,a5,a6)
  20.                            && tm6(a1,a2,a3,a4,a5,a6)
  21.                         
  22.                         ){
  23.                            System.out.println("a1="+a1+",a2="+a2+",a3="+a3+",a4="+a4+",a5="+a5+",a6="+a6);
  24.                         }
  25.                         
  26.                      }
  27.                   }
  28.                }
  29.             }
  30.          }
  31.       }
  32.       
  33.    }
  34.    
  35.    private static int countGo(int ... as){
  36.       int sum = 0;
  37.       for(int a : as){
  38.          if(a == 1){
  39.             sum ++;
  40.          }
  41.       }
  42.       
  43.       return sum;
  44.    }
  45.    
  46.    
  47.    private static boolean tm1(int a1,int a2,int a3,int a4,int a5,int a6){
  48.       if(countGo(a1,a2)>=1){
  49.          return true;
  50.       }
  51.       return false;
  52.    }
  53.    private static boolean tm2(int a1,int a2,int a3,int a4,int a5,int a6){
  54.       if(countGo(a1,a5,a6)==2){
  55.          return true;
  56.       }
  57.       return false;
  58.    }
  59.    private static boolean tm3(int a1,int a2,int a3,int a4,int a5,int a6){
  60.       if(countGo(a2,a3)==0 || countGo(a2,a3)==2){
  61.          return true;
  62.       }
  63.       return false;
  64.    }
  65.    private static boolean tm4(int a1,int a2,int a3,int a4,int a5,int a6){
  66.       if(countGo(a1,a4)==1){
  67.          return true;
  68.       }
  69.       return false;
  70.    }
  71.    private static boolean tm5(int a1,int a2,int a3,int a4,int a5,int a6){
  72.       if(countGo(a3,a4)==1){
  73.          return true;
  74.       }
  75.       return false;
  76.    }
  77.    private static boolean tm6(int a1,int a2,int a3,int a4,int a5,int a6){
  78.       if(countGo(a4)==0){
  79.          if(countGo(a5)==0){
  80.             return true;
  81.          }else{
  82.             return false;
  83.          }
  84.       }
  85.       return true;
  86.    }
  87. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2011-07-13 10:26 |只看该作者
3:
  1. public class Question{
  2.    public static void main(String[] args){
  3.       Question.t1();
  4.    }
  5.    
  6.    private static void t1(){
  7.       //1:先枚举各个题目的答案的组合可能性
  8.       for(int a1=1;a1<=5;a1++){
  9.          for(int a2=1;a2<=5;a2++){
  10.             for(int a3=1;a3<=5;a3++){
  11.                for(int a4=1;a4<=5;a4++){
  12.                   for(int a5=1;a5<=5;a5++){
  13.                      for(int a6=1;a6<=5;a6++){
  14.                         for(int a7=1;a7<=5;a7++){
  15.                            for(int a8=1;a8<=5;a8++){
  16.                               for(int a9=1;a9<=5;a9++){
  17.                                  for(int a10=1;a10<=5;a10++){
  18.                                     //2:按照条件进行过滤
  19.                                     if(
  20.                                        timu1(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
  21.                                     && timu2(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)   
  22.                                     && timu3(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)   
  23.                                     && timu4(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)   
  24.                                     && timu5(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)   
  25.                                     && timu6(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)   
  26.                                     && timu7(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)   
  27.                                     && timu8(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)   
  28.                                     && timu9(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)   
  29.                                     ){
  30.                                        System.out.println("a1="+a1+",a2="+a2+",a3="+a3+",a4="+a4+",a5="+a5+",a6="+a6+",a7="+a7+",a8="+a8+",a9="+a9+",a10="+a10);
  31.                                     }                                    
  32.                                     
  33.                                  }
  34.                               }
  35.                            }
  36.                         }
  37.                      }
  38.                   }
  39.                }
  40.             }
  41.          }
  42.       }
  43.    }
  44.    //  1、第一个答案是b的问题是哪一个?
  45. //  (a)2;(b) 3;(c)4;(d)5;(e)6
  46.    private static boolean timu1(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  47.       if((a1==1 && a2==2) || (a1==2 && a3==2 && a1!=2 && a2!=2)
  48.       ||   (a1==3 && a4==2 && a1!=2 && a2!=2 && a3!=2)
  49.       || (a1==4 && a5==2 && a1!=2 && a2!=2 && a3!=2 && a4!=2)
  50.       || (a1==5 && a6==2 && a1!=2 && a2!=2 && a3!=2 && a4!=2 && a5!=2)
  51.       ){
  52.          return true;
  53.       }      
  54.       return false;
  55.    }
  56.    //  2、唯一的连续两个具有相同答案的问题是:
  57. // (a)2,3;(b)3,4;(c)4,5;(d)5,6;(e)6,7;
  58.    private static boolean timu2(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  59.       if(
  60.             (a2==1 && a2==a3 && a1!=a2 && a3!=a4 && a4!=a5 && a5!=a6 && a6!=a7 && a7!=a8 && a8!=a9 && a9!=a10)
  61.       || (a2==2 && a3==a4 && a1!=a2 && a2!=a3 && a4!=a5 && a5!=a6 && a6!=a7 && a7!=a8 && a8!=a9 && a9!=a10)
  62.       || (a2==3 && a4==a5 && a1!=a2 && a2!=a3 && a3!=a4 && a5!=a6 && a6!=a7 && a7!=a8 && a8!=a9 && a9!=a10)
  63.       || (a2==4 && a5==a6 && a1!=a2 && a2!=a3 && a3!=a4 && a4!=a5 && a6!=a7 && a7!=a8 && a8!=a9 && a9!=a10)
  64.       || (a2==5 && a6==a7 && a1!=a2 && a2!=a3 && a3!=a4 && a4!=a5 && a5!=a6 && a7!=a8 && a8!=a9 && a9!=a10)
  65.       ){
  66.          return true;
  67.       }      
  68.       return false;
  69.    }
  70.    //3、本问题答案和哪一个问题的答案相同?
  71. //(a)1;(b)2;(c)4;(d)7;(e)6
  72.    private static boolean  timu3(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  73.       if((a3==1 && a1==a3) || (a3==2 && a2==a3) || (a3==3 && a4==a3)
  74.    || (a3==4 && a7==a3) || (a3==5 && a6==a3)
  75.       ){
  76.          return true;
  77.       }
  78.       return false;
  79.    }
  80.    //答案是a的问题的个数是:
  81. // (a)0;(b)1;(c)2;(d)3;(e)4
  82.    private static boolean  timu4(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  83.       if((a4==1 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==0)
  84.                || (a4==2 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==1)
  85.                || (a4==3 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==2)
  86.                || (a4==4 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==3)
  87.                || (a4==5 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==4)
  88.          ){
  89.             return true;
  90.          }
  91.          return false;
  92.    }
  93.    //5、本问题答案和哪一个问题的答案相同?
  94. //  (a)10;(b)9;(c)8;(d)7;(e)6
  95.    private static boolean  timu5(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  96.       if((a5==1 && a10==a5) || (a5==2 && a9==a5) || (a5==3 && a8==a5)
  97.    || (a5==4 && a7==a5) || (a5==5 && a6==a5)
  98.       ){
  99.          return true;
  100.       }
  101.       return false;
  102.    }
  103.    //6:答案是a的问题的个数和答案是什么的问题的个数相同?
  104. //  (a)b;(b)c;(c)d;(d)e;(e)以上都不是
  105.    private static boolean  timu6(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  106.       if((a6==1 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==sumGeShu(2,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10))
  107.          || (a6==2 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==sumGeShu(3,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10))
  108.          || (a6==3 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==sumGeShu(4,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10))
  109.          || (a6==4 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)==sumGeShu(5,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10))
  110.          || (a6==5 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)!=sumGeShu(2,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
  111.             && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)!=sumGeShu(3,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
  112.             && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)!=sumGeShu(4,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
  113.             && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)!=sumGeShu(5,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
  114.          )
  115.       ){
  116.          return true;
  117.       }
  118.       return false;      
  119.    }
  120.    
  121.    //7:按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?
  122.   //(a)4;(b)3;(c)2;(d)1;(e)0。(注:a和b相差一个字母)
  123.    private static boolean  timu7(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  124.       if((a7==1 && Math.abs(a8-a7)==4) || (a7==2 && Math.abs(a8-a7)==3)
  125.    || (a7==3 && Math.abs(a8-a7)==2) || (a7==4 && Math.abs(a8-a7)==1) || (a7==5 && Math.abs(a8-a7)==0)
  126.       ){
  127.          return true;
  128.       }
  129.       return false;
  130.    }
  131.    
  132.    //答案是元音字母的问题的个数是:
  133. //(a)2;(b)3;(c)4;(d)5;(e)6。(注:a和e是元音字母)
  134.    private static boolean  timu8(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  135.       if((a8==1 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(5,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) ==2 )
  136.          || (a8==2 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(5,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) ==3 )
  137.          || (a8==3 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(5,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) ==4 )
  138.          || (a8==4 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(5,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) ==5 )
  139.          || (a8==5 && sumGeShu(1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(5,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) ==6 )
  140.       ){
  141.          return true;
  142.       }
  143.       return false;
  144.    }
  145.    //答案是辅音字母的问题的个数是:
  146. //  (a)一个质数;(b)一个阶乘数;(c)一个平方数;(d)一个立方数,(e)5的倍数
  147.    private static boolean  timu9(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  148.       if(
  149.             (a9==1 && zhiShu(sumGeShu(2,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(3,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(4,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)) )
  150.          || (a9==2 && jieCheng(sumGeShu(2,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(3,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(4,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)) )
  151.          || (a9==3 && pingFang(sumGeShu(2,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(3,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(4,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)) )
  152.          || (a9==4 && liFang(sumGeShu(2,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(3,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(4,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)) )
  153.          || (a9==5 && (sumGeShu(2,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(3,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)+sumGeShu(4,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)) % 5==0 )
  154.       ){
  155.          return true;
  156.       }
  157.       return false;   
  158.    }
  159.    
  160.    private static boolean liFang(int a){
  161.       for(int i=1;i<a;i++){
  162.          if(i*i*i==a){
  163.             return true;
  164.          }
  165.       }
  166.       return false;
  167.    }
  168.    private static boolean pingFang(int a){
  169.       for(int i=1;i<a;i++){
  170.          if(i*i==a){
  171.             return true;
  172.          }
  173.       }
  174.       return false;
  175.    }
  176.    private static boolean jieCheng(int a){
  177.       int v = 1;
  178.       for(int i=1;i<a;i++){
  179.          v = v * i;
  180.          if(v==a){
  181.             return true;
  182.          }
  183.       }
  184.       return false;
  185.    }
  186.    private static boolean zhiShu(int a){
  187.       if(a==2){
  188.          return true;
  189.       }
  190.       for(int i=2;i<a;i++){
  191.          if(a % i == 0){
  192.             return false;
  193.          }
  194.       }      
  195.       return true;
  196.    }
  197.    
  198.    
  199.    
  200.    
  201.    private static int sumGeShu(int answer,int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10){
  202.       int sum = 0;
  203.       if(a1==answer){
  204.          sum+=1;
  205.       }
  206.       if(a2==answer){
  207.          sum+=1;
  208.       }
  209.       if(a3==answer){
  210.          sum+=1;
  211.       }
  212.       if(a4==answer){
  213.          sum+=1;
  214.       }
  215.       if(a5==answer){
  216.          sum+=1;
  217.       }
  218.       if(a6==answer){
  219.          sum+=1;
  220.       }
  221.       if(a7==answer){
  222.          sum+=1;
  223.       }
  224.       if(a8==answer){
  225.          sum+=1;
  226.       }
  227.       if(a9==answer){
  228.          sum+=1;
  229.       }
  230.       if(a10==answer){
  231.          sum+=1;
  232.       }
  233.       return sum;
  234.    }

  235. }
复制代码

论坛徽章:
0
13 [报告]
发表于 2011-07-13 10:27 |只看该作者
发完了,这循环闹的!!!不知道还有没有其他方法??

论坛徽章:
0
14 [报告]
发表于 2011-07-13 11:49 |只看该作者
抱回去研究研究

论坛徽章:
0
15 [报告]
发表于 2011-07-15 15:12 |只看该作者
不错不错

论坛徽章:
0
16 [报告]
发表于 2011-07-17 11:01 |只看该作者
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class testAnt {
        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //记录开始时间
                Date startTime = new Date();
                ant ant1;
                ant ant2;
                ant ant3;
                ant ant4;
                ant ant5;
                //存储蚂蚁列表
                List antList;
                int maxTime=0;
                int minTime=999999;
                //把所有可能的情况循环出来
                for(int i1=-1;i1<2;i1=i1+2)
                {
                        for(int i2=-1;i2<2;i2=i2+2)
                        {
                                for(int i3=-1;i3<2;i3=i3+2)
                                {
                                        for(int i4=-1;i4<2;i4=i4+2)
                                        {
                                                for(int i5=-1;i5<2;i5=i5+2)
                                                {
                                                        //初始化蚂蚁
                                                        ant1=new ant("ant1",3,i1);
                                                        ant2=new ant("ant2",7,i2);
                                                        ant4=new ant("ant4",17,i4);
                                                        ant5=new ant("ant5",23,i5);
                                                        ant3=new ant("ant3",11,i3);
                                                        antList=new ArrayList();
                                                        //把蚂蚁填充到列表中
                                                        antList.add(ant1);
                                                        antList.add(ant2);
                                                        antList.add(ant3);
                                                        antList.add(ant4);
                                                        antList.add(ant5);
                                                        int time=cacluteTime(antList);
                                                        if(maxTime<time)maxTime=time;
                                                        if(minTime>time)minTime=time;
                                                }
                                        }
                                }
                        }
                       
                }
                System.out.println("最大时间:"+maxTime);
                System.out.println("最小时间:"+minTime);
                //记录结束时间
                Date endTime=new Date();
                //计算运行时间
                long split=endTime.getTime()-startTime.getTime();
                System.out.println(split);
}
        /**
         * 计算某一种情况下的时间
         * @param antList 蚂蚁列表
         * @return 该蚂蚁列表所有蚂蚁爬出来需要的时间
         */
        private static int cacluteTime(List antList)
        {
                for(int i=0;true;i++)
                {
                        //防止死循环
                        if(i==1000)
                        {
                                return i;
                        }
                        //判断是否完成
                        if(antList.size()==0)
                        {
                                return i;
                        }
                        //蚂蚁移动
                        for(int j=0;j<antList.size();j++)
                        {
                                ant tt=(ant)antList.get(j);
                                tt.setState(tt.getState()+tt.getNarrow());
                                //移除走出去的蚂蚁
                                if(tt.getState()<0||tt.getState()>27)
                                {
                                        antList.remove(j);
                                }
                        }
                        //判断是否相撞,相撞则转向
                        for(int j=0;j<antList.size()-1;j++)
                        {
                                ant t1=(ant)antList.get(j);
                                ant t2=(ant)antList.get(j+1);
                                if(t1.getState()==t2.getState())
                                {
                                        t1.setNarrow(t1.getNarrow()*-1);
                                        t2.setNarrow(t2.getNarrow()*-1);
                                }
                        }
        }


}
}

/**
* @author
*蚂蚁类
*/
class ant
{
       
        /**
         * 初始化
         * @param pName 蚂蚁名称
         * @param pState 蚂蚁位置
         * @param pNarrow 蚂蚁方向
         */
        public ant(String pName,int pState,int pNarrow)
        {
                this.name=pName;
                this.state=pState;
                this.narrow=pNarrow;
        }
        private String name;
        private int state;
        private int narrow;
        public int getState() {
                return state;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public void setState(int state) {
                this.state = state;
        }
        public int getNarrow() {
                return narrow;
        }
        public void setNarrow(int narrow) {
                this.narrow = narrow;
        }
}

论坛徽章:
0
17 [报告]
发表于 2011-07-18 11:18 |只看该作者

论坛徽章:
0
18 [报告]
发表于 2011-07-18 11:31 |只看该作者
是够变态的

论坛徽章:
0
19 [报告]
发表于 2011-07-19 10:04 |只看该作者
我的个妈呀,是想的这种题啊

论坛徽章:
0
20 [报告]
发表于 2011-07-19 10:44 |只看该作者
学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP