HelloWorld 善戰(zhàn)者,求之于勢,不責(zé)于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks

          一著名軟件公司的java筆試算法題!       
             算法程序題:       
                     該公司筆試題就1個,要求在10分鐘內(nèi)作完。       
                     題目如下:用1、2、2、3、4、5這六個數(shù)字,用java寫一個main函數(shù),打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連。

          循環(huán)方法
          class Test2 {
          public static void main(String args[]) {
             char[] c = { '1', '2', '2', '3', '4', '5' };
             for (int i = 0; i < c.length; i++) {
              for (int j = 0; j < c.length; j++) {
               if (i == j || (c[i] == '3' && c[j] == '5'))
                continue;
               for (int k = 0; k < c.length; k++) {
                if (k == i || k == j || (c[j] == '3' && c[k] == '5')
                  || c[k] == '4') {
                 continue;
                }
                for (int m = 0; m < c.length; m++) {
                 if (m == k || m == i || m == j
                   || (c[k] == '3' && c[m] == 5)) {
                  continue;
                 }
                 for (int n = 0; n < c.length; n++) {
                  if (n == m || n == k || n == i || n == j
                    || (c[m] == '3' && c[n] == '5')) {
                   continue;
                  }
                  for (int l = 0; l < c.length; l++) {
                   if (l == n || l == m || l == k || l == j
                     || l == i
                     || (c[n] == '3' && c[l] == '5')) {
                    continue;
                   }
                   System.out.println(c[i] + "" + c[j] + "" + c[k]
                     + "" + c[m] + "" + c[n] + "" + c[l]);
                  }
                 }
                }
               }
              }
             }
          }
          }

           

          遞歸方法
          class Test2 {

          public int[] getNextDifPos(int[] before, int add) {
             int[] res = new int[before.length + 1];
             for (int i = 0; i < before.length; i++) {
              res[i] = before[i];
             }
             res[res.length - 1] = add;
             return res;
          }

          public int getNextPos(int[] pos) {
             for (int i = 0; i < pos.length; i++) {
              if (pos[i] != -1) {
               return i;
              }
             }
             return -1;
          }

          public void getStr(int[] before, char[] chars) {
             if (before.length == chars.length) {
              StringBuffer str = new StringBuffer();
              for (int i = 0; i < before.length; i++) {
               str.append(chars[before[i]]);
              }
              // 加判斷條件
              if (str.charAt(2) == '4' || str.indexOf("35") >= 0) {
               return;
              }
              System.out.println(str.toString());
             } else if (before.length < chars.length) {
              int[] pos = new int[chars.length];
              for (int i = 0; i < before.length; i++) {
               pos[before[i]] = -1;
              }
              int nextPos;
              while ((nextPos = getNextPos(pos)) != -1) {
               pos[nextPos] = -1;
               getStr(getNextDifPos(before, nextPos), chars);
              }
             }
          }

          public static void main(String args[]) {
             char[] c = { '1', '2', '2', '3', '4', '5' };
             int[] l = {};
             Test2 t = new Test2();
             t.getStr(l, c);
          }
          }



          </script>

          posted on 2007-08-13 19:01 helloworld2008 閱讀(333) 評論(0)  編輯  收藏 所屬分類: java邏輯題目
          主站蜘蛛池模板: 龙南县| 淮南市| 额敏县| 读书| 闽侯县| 治县。| 县级市| 宁海县| 宜兴市| 东明县| 枣庄市| 绥芬河市| 象山县| 百色市| 石城县| 唐山市| 施秉县| 包头市| 延川县| 双鸭山市| 武鸣县| 武安市| 宜黄县| 台中市| 甘南县| 仪陇县| 望谟县| 安多县| 吉木萨尔县| 福州市| 泰宁县| 醴陵市| 大英县| 都江堰市| 宽甸| 荔波县| 金溪县| 太湖县| SHOW| 屯昌县| 枝江市|