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

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

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

          一著名軟件公司的java筆試算法題!       
             算法程序題:       
                     該公司筆試題就1個(gè),要求在10分鐘內(nèi)作完。       
                     題目如下:用1、2、2、3、4、5這六個(gè)數(shù)字,用java寫(xiě)一個(gè)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) 評(píng)論(0)  編輯  收藏 所屬分類: java邏輯題目
          主站蜘蛛池模板: 嘉峪关市| 策勒县| 漳州市| 虞城县| 同仁县| 定陶县| 延津县| 新余市| 莲花县| 安吉县| 新疆| 吴川市| 阳山县| 合肥市| 金山区| 景泰县| 浏阳市| 民和| 分宜县| 扎兰屯市| 贡嘎县| 孙吴县| 黎平县| 晋州市| 江山市| 榆社县| 罗源县| 盐亭县| 涞水县| 顺昌县| 潢川县| 曲松县| 宜兰市| 五家渠市| 武强县| 闻喜县| 图木舒克市| 邵武市| 清水河县| 汉中市| 洞口县|