发新话题
打印

求救!!软考的算法问题。。

求救!!软考的算法问题。。

问题描述:找出从自然数1,2,…,n中任取r个数的所有组合。

    采用回溯法找问题的解,将找到的组合以从小到大顺序存于a[0],a[1],…,a[r-1]中,组合的元素满足以下性质:

    (1) a[i+1]>a[i],后一个数字比前一个大;

    (2) a[i]-i<=n-r+1。

    按回溯法的思想,我编程如下:

#include "stdio.h"
#define MAXN 100
int a[MAXN];
void comb(int m,int r )
{
int i,j;

i=0;
a[i]=1;

do {
        if (a[i]-i<=m-r+1)
        {
        if(i==r-1)
                {
                        for (j=0;j<r ;j++)
                        {
                        printf("%4d",a[j]);
                        printf("\n---------------------------\n");
                        }
                }
               
                a[++i]++;
                continue;

        }
        else
        {
        if(i==0) return;
        a[--i]++;
        }
} while(1);

}

void main()
{
        comb(5,3);
}


可运行后没有结果,为什么呢?

TOP

回复

你思考问题的方法错拉
换个思考方向吧

TOP

发新话题