高分求组合算法已知存在数列1-9,从这9个数中选出4个数字2,4,5,8,已知求9选4的全组合算法C94,现在,希望得到

高分求组合算法
已知存在数列1-9,从这9个数中选出4个数字2,4,5,8,已知求9选4的全组合算法C94,现在,希望得到一种算法,能得出2,4,5,8是全组合中的第几个组合?反过来,假如我知道这种算法,就能通过知道是第几个组合而得到这个组合是2,4,5,8的结果.
flyingzeus 1年前 已收到1个回答 举报

amy1229 幼苗

共回答了17个问题采纳率:88.2% 举报

首先,第一个问题,求2,4,5,8是第几个组合,首先原始程序语言算法如下:

for(i = 1 ;i <= 9-4;i++)
{
x05for(j = i+1 ;j <= 9-3;j++)
x05{
x05x05for(k = j+1;k <= 9-2;k++ )
x05x05{
x05x05x05for(m=k+1;m <= 9-1;m++)
x05x05{
x05x05x05x05num++;
x05x05x05}
x05x05}
x05}
}
以上是求得总组合数的原始算法,现假设存在变量p1,p2,p3,p4,其初始值分别为1,2,3,4分析以上算法,当第一个数p1变为2时,此时p2,p3,p4已经进行了一次C(8,3)==56的全组合,当运算56次的时候,数组组合状态为2,3,4,5,接着,p1不变,p2从3,运行到4的时候,表示p3,p4,进行了一次C(6,2)=15的全组合,此时组合状态为2,4,5,6接着,p1,p2,不变,p3符合要求,本身不变,接着,p4从6运行到8,进行了2次运算,故,得出,2,4,5,8是第56+15+2=73次排列.
第二个问题:已知存在数列1-9,求第73次排列数组是什么,
答:依旧设存在变量p1,p2,p3,p4,初始状态为1,2,3,4,计算,当p1,由1变为2时,进行了C(8,3)=56次运算,如果p1继续变为3,则,进行了56+C(7,3)=56+35=91>73要求值,故,此时我们确定了p1的值为2,此时的组合状态为;2,3,4,5,接着计算p2,当p2,由3变为4时,进行了C(6,2)=15次运算,如果p2继续由4,变为5,则继续进行了C(5,2)=10次运算,计算56+15+10=81>73故确定了p2为4,而不能是5;接着,方法同上,得到p3=5,p4=8.完成!

1年前

10
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.013 s. - webmaster@yulucn.com