用递归程序做吧,应该不是很难的,实在搞不定的话,给我发封mail,我帮你做做看

解决方案 »

  1.   

    int i,j,k,d;
    for(i=0;i<0x40;i++)
    {
        k=0;
        d=i;
        for(j=0;j<5;j++)
        {
            if(d%2==1)
               k++;
            d=d/2;
        }
        if(k==3)
        {
            d=i;
            for(j=0;j<5;j++)
            {
                if(d%2==1)
                   printf("%d ",d);
                d=d/2;
            }
            printf("\n");
        }
    }
      

  2.   

    void comb(int n,int r,int a[m])
    {int j,ri;
          ri=1;a[1]=n;
          do{
             if(ri!=r)
               if(ri+a[ri]>r){
               a[ri+1]=a[ri]-1;
                ri++;}
               else{
                  ri--;
                  a[ri]--;}
               else{
                 for(j=1;j<=t;j++)
                 cout<<a[j];
                 cout<<"\n";
                 if(a[r]==1){
                   ri--;
                   a[ri]--;}
                 else
                  a[ri]--;}
               }while(a[1]!=r-1);
              } 
      

  3.   

    //刚刚看错题了,下面
    void fun(int n,int m,int* list)
    {   int i,j,k,b=1;  
        int p[100];
        for(i=0;i<=m;i++){
            p[i]=i;
        }   
        while(b){
            for(i=1;i<=m;i++)
                printf("%d ",list[p[i]-1]);
            printf("\n");
            if(p[1]==n-m+1)//是否结束
                break;
            if(p[m]<n)//产生一组数据
            {   p[m]++;
                continue;
            }
            for(j=m-1;j>0;j--)//回溯
            {   if(p[j]!=p[j+1]-1)
                {   p[j]++;
                    for(k=j+1;k<=m;k++)
                        p[k]=p[k-1]+1;
                    break;
                }           
            }   
        }
    }
      

  4.   


    int Data[100];void Combination(int Start,int MaxM,int MaxN)
    {
    int i;
    if(Start == MaxN)
    {
    SaveDat(MaxN);
    return ;
    }
    for(i=0;i<MaxM;i++)
    {
    Data[Start] = i;
    Combination(Start+1,MaxM,MaxN);
    }
    return ;
    }
    调用时用Combination(0,5,3)
      

  5.   

    没看清楚,
    void CMyArithmetic::MyCombination(int Current, int MaxM, int MaxN)
    {
    bool bSame;
    if(Current == MaxN)
    {
    SaveIntArray(MaxN);//打印出整个数组
    m_Count++;
    return ;
    }
    for(int i=0;i<MaxM;i++)
    {
    bSame = false;
    for(int j=0;j<Current;j++)
    if(m_DataIntArray[j] >= i)
    {
    bSame = true;
    break;
    }
    if(!bSame)
    {
    m_DataIntArray[Current] = i;
    MyCombination(Current+1,MaxM,MaxN);
    }
    }
    }
    调用时用MyCombination(0,5,3)