给你n个数,让你找出来6个按升序排序,全部找出来。
那就搜索一下,
一个点记录搜的位置。一个记录长度。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[20],b[20];
int v[20];
int n,m;
void dfs(int s,int l){
if(l==6){
for(int i=0;i<5;++i) printf("%d ",b[i]);
printf("%d\n",b[5]);
return ;
}
for(int i=s;i<n;++i){
if(!v[i]){
v[i]=1;
b[l]=a[i];
dfs(i+1,l+1);
v[i]=0;
}
}
}
int main(){
int f=1;
while(scanf("%d",&n)&&n){
if(!f) printf("\n");
if(f) f=0;
for(int i=0;i<n;++i) scanf("%d",&a[i]);
memset(v,0,sizeof(v));
dfs(0,0);
}
return 0;
}
但是还有一种更好的解法。:
暴力大法。!!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[20];
int n,m;
int main(){
int f=1;
while(scanf("%d",&n)&&n){
if(!f) printf("\n");
if(f) f=0;
for(int i=0;i<n;++i) scanf("%d",&a[i]);
for(int i1=0;i1<n-5;++i1)
for(int i2=i1+1;i2<n-4;++i2)
for(int i3=i2+1;i3<n-3;++i3)
for(int i4=i3+1;i4<n-2;++i4)
for(int i5=i4+1;i5<n-1;++i5)
for(int i6=i5+1;i6<n;++i6)
printf("%d %d %d %d %d %d\n",a[i1],a[i2],a[i3],a[i4],a[i5],a[i6]);
}
return 0;
}