各位给出的答案的都是高人 佩服啊
Only the Code Tells the Truth K.I.S.S
#include<stdio.h> #include<malloc.h> #include<math.h> #define MAX 3 int Tile[MAX] = {1, 2, 3}; int NumTile(int n); //动态规划法 int main() { int n; int *S; // scanf("%d", &n); n = 1; while (n != 10) { printf("s%d = %d\n", n, NumTile(n)); n++; } return 0; } int NumTile(int n) //动态规划法 { int (*f)[MAX];//f[n][m]的含义为总长度为n,且最后一块地砖长度为Tile[m]的组合数量 int i, j, k, sum; f = (int (*)[MAX])calloc(n+1, sizeof(f[0])); for (i=0; i<MAX; i++)//总长度为Tile[i],且最后一块地砖长度为Tile[i]的组合只有1个 f[Tile[i]][i] = 1; for (i=1; i<=n; i++)//总长度 { for (j=0; j<MAX; j++)//最后一块地砖长度为Tile[j] { k = 0; if (j == 0) k = 1; for (; k<MAX; k++)//最后一块地砖长度为Tile[k] { if (i > Tile[j]) { f[i][j] += f[i-Tile[j]][k];//累积总长度为i,且最后一块地砖长度为Tile[k]的组合数量 } } } } for (sum=j=0; j<MAX; j++) { sum += f[n][j]; } free(f); return sum; }