求——排列组合中,求各种组合方式的——算法!!!
例如A、B、C中选两个出来就有有三种组合方式:AB、AC、BC。现在我想要一个能在五个数中选出各种组合方式的算法,请各位赐教!! 问题点数:28、回复次数:4Top
1 楼frman()回复于 2001-11-19 12:39:27 得分 0
比如你想在5个数中选3个数,那可以设一数组a[3],初始化为a[3] = {1,2,3};// 表示5个数中选1,2,3这三个数。 然后对数组最后一个元素做加1运算,注意进位,并时刻保持a[i]<a[i+1], 且a[2] <= 5,直到a[3] ={3,4,5};就可以求出全部组合数
例:
{1,2,3}
{1,2,4}
{1,2,5}
{1,3,4}
{1,3,5}
{1,4,5}
{2,3,4}
{2,3,5}
{2,4,5}
{3,4,5}
Top
2 楼s7110110(铁)回复于 2001-11-19 13:11:46 得分 0
谢谢你的赐教!但是小弟还是不太明白,你说的进位是指什么?而且那么多条件,流程该如何控制。能不能请您写出流程图?Top
3 楼frman()回复于 2001-11-19 13:27:49 得分 28
给你个程序吧:
#include <stdio.H>
int n, m;
int change(int *a)
{
int i, j ,k = 0;
for ( i = m-1; i >= 0; i--)
{
if ( a[i] < n-k )
{
a[i]++;
for ( j = i+1; j < m; j++)
a[j] = a[i]+j-i;
return 1;
}
k++;
}
return 0;
}
void main()
{
int a[10], i;
printf("input N M:"); //表示N个数中选M个数的组合
scanf("%d%d", &n,&m);
for ( i = 0; i < m; i++)
a[i] = i+1;
do
{
for ( i = 0; i < m; i++)
printf("%d ", a[i]);
printf("\n");
} while ( change(a));
}
Top
4 楼s7110110(铁)回复于 2001-11-19 14:20:59 得分 0
感谢你的指教!Top




