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