大神看过来 一道很简单的算法题

问题描述:

图片说明

代码如下:

#include "stdio.h"

double Fun(int n)
{
    double value = 1;
    int FenMu = n;
    for (int i = 1; i <= n- 3; i++)
    {

       value = value * ((double)i /(double)FenMu);
       FenMu = FenMu - 1;
    }
    return value;
}

int main()
{
    int n;
    double result;
    while (true)
    {
        printf("请输入n(要求n>3,输入0结束程序):\n");
        scanf("%d", &n);
        if (n == 0)
        {
            break;
        }
        else
        {
            result = Fun(n);
            printf("%f", result);
        }
    }

    return 0;
}

代码比较简单,就不加注释了。

1/n 2/(n-1) * 3/(n-2) * ... *(n-3)/4 * (n-2)/3 * (n-1)/2 * n =F 3/(n-2) * 2/(n-1) *1/n;

前面的第一项和最后一项约掉了。

同时分n是奇数和偶数。技术比偶数多剩一项,即中间的那项。

借楼上的回答继续说,
即使奇数比偶数多一项,那多的那一项也是1 所以左边始终是1
那就有 F * (n-2)/3 * (n-1)/2 * n = 1
F = 6/(n-2)(n-1)n

6/(n³-3n²+2n)