posts - 495,  comments - 11,  trackbacks - 0


          15 = 15
          15 = 7 + 8
          15 = 4 + 5 + 6
          15 = 1 + 2 + 3 + 4 + 5

          首先考慮一般的形式,設n為被劃分的正整數,x為劃分后最小的整數,如果n有一種劃分,那么


          結果就是x,如果有兩種劃分,就是x和x x + 1, 如果有m種劃分,就是 x 、x x + 1 、 x x + 1 x + 2 、... 、x x + 1 x + 2 ... x + m - 1


          將每一個結果相加得到一個公式(i * x + i * (i - 1) / 2) = n,i為當前劃分后相加的正整數個數。


          滿足條件的劃分就是使x為正整數的所有情況。


          如上例,當i = 1時,即劃分成一個正整數時,x = 15, 當i = 2時, x = 7。


          當x = 3時,x = 4, 當x = 4時,4/9,不是正整數,因此,15不可能劃分成4個正整數相加。


          當x = 5時,x = 1。

          Java代碼

          public static int split(int n) {
          ?? int m = 0, x, t1, t2;
          ?? for (int i = 1; (t1 = i * (i - 1) / 2) < n; i++) {
          ??? t2 = (n - t1);
          ??? x = t2 / i;
          ??? if (x <= 0)
          ???? break;
          ??? if ((n - t1) % i == 0) {
          ???? System.out.print(x + " ");
          ???? for (int j = 1; j < i; j++) {
          ????? System.out.print(x + j + " ");
          ???? }
          ???? System.out.println();
          ???? m++;
          ??? }
          ?? }
          ?? return m;
          }

          posted on 2009-08-29 02:28 jadmin 閱讀(108) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 垣曲县| 华亭县| 谷城县| 通榆县| 曲靖市| 嫩江县| 民勤县| 永丰县| 永德县| 武隆县| 屏东县| 定西市| 丽江市| 海原县| 晴隆县| 盐津县| 兴山县| 石家庄市| 青冈县| 化隆| 金川县| 百色市| 修水县| 历史| 呈贡县| 新建县| 桑日县| 山阴县| 江口县| 通城县| 调兵山市| 临武县| 乐亭县| 怀宁县| 普安县| 临沧市| 普定县| 雷波县| 皋兰县| 永登县| 道孚县|