不定三元一次方程+排列组合解爬楼梯问题

问题遇到的现象和发生背景

小明特别喜欢爬楼梯,他有的时候一次爬一个台阶,有的时候一次爬两个台阶,有的时候一次爬三个台阶。如果这个楼梯有n个台阶,小明一共有多少种爬法呢?
c语言初学者 完全没有想到递归 因为之前做过一个搬砖的问题 所以我就又用了一个三元一次方程和有重复元素的排列去解

img

用代码块功能插入代码,请勿粘贴截图
#include
int A(int);

int main(void)
{
    int n, x, y, z, i;
    scanf_s("%d",&n);
    for (x = i = 0; x <= n; x++)//先外循环把x定下来 变成二元方程 然后内循环变y 把所有符合的z筛选出来 
    {
        for (y = 0; y <= n-x; y++)
        {
            if ((n - x - 2 * y) % 3 == 0&&(n - x - 2 * y)>=0)
            {
                z = (n - x - 2 * y) / 3; 
                printf("x=%d,y=%d,z=%d\n", x, y, z);
                i = i+(A(x + y + z) / (A(x) * A(y) * A(z)));//用了一个有重复元素的排列
            }
        }
    }
    printf("%d", i);

    return 0;
}

int A(int n)
{
    int i, j;
    for (i = 0, j = 1; i < n; i++)
        j = j * (i + 1);

    return j;
}

运行结果及报错内容

img


这是输入24的情况 结果是154178 但是我看答案是1389537 我看不出来我写的这个哪错了 是这个三元一次方程有漏解还是还是我用的排序公式有问题?

我想要达到的结果

能不能不不使用递归 把我这种修正一下 还是或者说我这种方法就是错误的?

没人吗没人吗