算法求解
我正在编一个程序,需要用到一个算法。我百般思考终于没有解决这个难题。最终我改用了其他的算法。不过我还是对这个未解决的算法很感兴趣,于是写在这里求解
有n个数,分别是 1,2,3,…,n 现在要写出这n个数的所有组合方式(就是随便选择这几个数,共有2^n-1种选法),用这样的方法:
首先 选中 1。只有“1”被选中,其他的数字都没有选中。这是第1种组合方式。 然后循环以下步骤: 如果最后一个选中的数后面仍然有未选中的数,就选中最后一个选中的数后面的一个数,形成下一个组合方式。 如果最后一个选中的数就是最后一个数,就去掉选中已选中的最后一个数和已选中的倒数第二个数,并选中去掉选中这两个数前的已选中的倒数第二个数的后一个数,形成下一个组合方式。
比如n=4 组合结果是这样的:
第X种组合方式 为 1 1 2 1,2 3 1,2,3 4 1,2,3,4 5 1,2,4 6 1,3 7 1,3,4 8 1,4 9 2 10 2,3 11 2,3,4 12 2,4 13 3 14 3,4 15 4 次为1,2,3,4四个数的所有组合结果
问题是,我想做到输入一种组合结果,让电脑计算出这是第几种组合方式
例如,输入n=4 输入 2,3,4 输出 11
|