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 <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;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询