HelloWorld 善戰者,求之于勢,不責于人;故能擇人而任勢。

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

            BlogJava :: 首頁 ::  :: 聯系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks

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

          循環方法
          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 閱讀(340) 評論(0)  編輯  收藏 所屬分類: java 、邏輯題目
          主站蜘蛛池模板: 修水县| 长寿区| 石楼县| 玛纳斯县| 叙永县| 都江堰市| 星子县| 双柏县| 昭觉县| 彭阳县| 扎赉特旗| 晋宁县| 普兰店市| 江达县| 习水县| 台湾省| 宜兰县| 哈巴河县| 依兰县| 当涂县| 运城市| 乌鲁木齐县| 日喀则市| 清涧县| 广安市| 富阳市| 鄱阳县| 新竹县| 汕头市| 溧阳市| 宁夏| 桂林市| 运城市| 唐河县| 敖汉旗| 方城县| 崇阳县| 四川省| 辛集市| 平谷区| 盘山县|