本来想在每次输出满6时判断是否为增序,后来觉得复杂度太高,虽然k<13,可以欺负数据00:02过,但是不光彩,就顺手改了一下,在输出每一位的时候判断一下当前是否会小于已经输出的位,没想到直接就通过了 //2008-01-02 23:53:59 Accepted 1089 C++ 00:00.00 436K #include<stdio.h> int n; int s[14]; bool sflag[14]; int o[7]; int tot; void pr() { int i; tot++; printf("%d",o[0]); for(i=1;i<=5;i++) printf(" %d",o[i]); printf("/n"); } void getall(int sp,int op) { int i; int min; if(op==6) { pr(); return; } else { min=50; for(i=sp;i<n;i++) { if(sflag[i]) { if(op>0 && s[i]<o[op-1]) continue; o[op] = s[i]; sflag[i] = false; getall(sp+1,op+1); sflag[i] = true; } } } } int main() { int i; tot=0; freopen("1089.txt","r",stdin); while((scanf("%d",&n)!=EOF) && n!=0) { tot++; for(i=0;i<n;i++) { scanf("%d",&s[i]); sflag[i] = true; } if(tot>1) printf("/n"); getall(0,0); } fclose(stdin); return 0; }