UVA 441 Lotto

题目:组合

分析:递归(由于没怎么系统学习过算法,直觉用递归,第一次写递归结果有错,第二次加了个判断,让错误的不输出,就对了)
大神的代码:他的分析是搜索,可能是某类问题。代码用了一个数组,记录数的状态(被用/未被用),递归有个参数与我不同(但我改成与他一样,我的代码好像也行,因为我在递归里有判断)https://blog.csdn.net/mobius_strip/article/details/21180857

注意:我的代码中的t删掉,把fot(i=t; ;)换成fot(i=k; ;)也行

#include "cstring"
#include"cstdio"
#include"iostream"
void print(int printa[]);
void getreturn(int t,int n,int k);
int a[13]={0};
int printa[6]={0};
int main()
{
    int c;int flag=0;
 while(scanf("%d",&c) &&  c)
 {
 
     if(flag!=0)  printf("\n");
 
     for(int i=0;i<c;i++)
     {
         scanf("%d",&a[i]);
     }
 
     getreturn(0,c-6+1,0);
     flag++;
 }
 return 0;
}
 
void getreturn(int t,int n,int k)
{
    if(k==6)
    {
        int flag=1;
        for(int i=1;i<6;i++)
        {
            if(printa[i-1]>=printa[i])
            {
                flag=0;break;
            }
        }
        if(flag)
        print(printa);
 
        return;
    }
 
    for(int i=t;i<n;i++)
    {
        printa[k]=a[i];
        getreturn(t+1,n+1,k+1);
    }
    return ;
}
 
void print(int printa[])
{
    for(int i=0;i<6;i++)
    {
        if(i!=0) printf(" ");
        printf("%d",printa[i]);
    }
    printf("\n");
}

你可能感兴趣的:(uva题)