ACM 算法超难题目

如题,超级难度,摸轻易尝试。
2025-02-26 07:33:49
推荐回答(1个)
回答1:

出题人的表达能力太差,题目叙述得很糟糕,最后两个例子也错了

比较好的叙述是,输入n,输出从0到32中取6项按字典序排序下的第n个组合(从第0个组合0,1,2,3,4,5开始计)


这种谈不上什么难题,只不过是入门级的问题

在给定前k项的(记第k项为m)情况下余下的项共有C(32-m,6-k)种情况,这里C(x,y)表示x取y的组合数,以此编程即可

给你一个例子

#include 
int binom(int n, int m)
{
    int i, c = 1;
    if (2*m > n)
        n = n-m;
    for (i = 1; i <= m; i++)
        c = c*(n+1-i)/i;
    return c;
}
int main()
{
    int i, n;
    int A[6] = {-1};
    while (scanf("%d", &n) != EOF)
    {
        n++;
        if (n <= 0 || n > binom(33, 6))
        {
            printf("Invalid input\n");
            continue;
        }
        for (i = 1; i <= 5; i++)
        {
            for (A[i] = A[i-1] + 1; ; A[i]++)
            {
                int t = binom(32 - A[i], 6 - i);
                if (n > t)
                    n -= t;
                else
                    break;
            }
            printf("%d,", A[i]);
        }
        printf("%d\n", A[i-1] + n);
    }
    return 0;
}