1. 程式人生 > >基本演算法(整數劃分)

基本演算法(整數劃分)

#include <stdio.h> int main() {
 int s, i, j, k, t, u;  static int a[21][800][21];  printf("input s(s<=20):"); scanf_s("%d", &s);  a[2][1][1] = 1; a[2][1][2] = 1; a[2][2][1] = 2;  u = 2;  for (k = 3; k <= s; k++)  {
  for (j = 1; j <= u; j++)   {
   a[k][j][1] = 1;    for (t = 2; t <= k; t++)         // 實施在k−1所有劃分式前加1操作      a[k][j][t] = a[k-1][j][t-1];   }   for (i = u, j = 1; j <= u; j++)    if (a[k-1][j][1]<a[k-1][j][2])   // 若k−1劃分式第1項小於第2項     {
    i++;               // 第1項加1為k的第i個劃分式的第1項      a[k][i][1] = a[k-1][j][1] + 1;     for (t = 2; t <= k-1; t++)      a[k][i][t] = a[k-1][j][t];    }   i++; a[k][i][1] = k;              // k的最後一個劃分式為:k=k    u = i;  }  for (j = 1; j <= u; j++)                // 輸出s的所有劃分式   {
  printf("%3d: %d=%d", j, s, a[s][j][1]);   i = 2;   while (a[s][j][i]>0)   {
   printf("+%d", a[s][j][i]); i++;
  }   printf("\n");  }
 return 0;
}