32

问答题 32 /100

给定n个数(1,2,......,n),从中选取任意两两不同的k个数请编写程序输出所有的可能的选择,则要求不重不漏。

参考答案

程序思路:定义一个数组,其下标表示1到n个数,数组元素的值为1表示其下标代数的数被选中,为零则没被选中。
首先初始化,将数组前k个元素置1,表示第一个组合为前k个数。 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合。
同时将其左边的所有“1”全部移到数组的最左端。 当第一个“1”移动到数组的n-k的位置,即k个“1”全部移动到最右端时,就得到了最后一个组合。