ACM 算法超难题目

如题,超级难度,摸轻易尝试。... 如题,超级难度,摸轻易尝试。 展开
 我来答
电灯剑客
科技发烧友

推荐于2016-04-23 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:1.2万
采纳率:83%
帮助的人:4843万
展开全部

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

比较好的叙述是,输入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 <stdio.h>
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;
}
追问
麻烦你好好看看。最大值为C(33,6)=1107568=arrA[27,28,29,30,31,32]。而用你给出来的算出来的是arrA[134,135,136,137,138,-2030723791]
追答
第6行有个笔误,改成m=n-m;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式