729--The Hamming Distance Problem

///组合问题,主要利用生成法,方法见转载的文章 ////也可以用增量构造法,算出所有的增序排列但只输出符合要求的排列 #include<stdio.h> #include<string.h> #define LOCAL int n,h,k; int t[20]; int find() { for(k=n-1;k>=1;k--) { if(t[k]==1&&t[k-1]==0) return 1; } return 0; } void change() { int i,j,p; int cou=0; t[k]=0; t[k-1]=1; for(i=n-1;i>k;i--) if(t[i]==1) cou++; i=n-1; while(cou--) { t[i]=1; i--; } for(j=k+1;j<=i;j++) t[j]=0; /*printf("change:/n");// for(i=0;i<n;i++)/// printf("%d ",t[i]);// printf("/n");///*/ } void print() { int i; for(i=0;i<n;i++) printf("%d",t[i]); printf("/n"); while(find()) { change(); for(i=0;i<n;i++) printf("%d",t[i]); printf("/n"); } } int main() { #ifdef LOCAL freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int cas; scanf("%d",&cas); while(cas--) { scanf("%d%d",&n,&h); memset(t,0,sizeof(t)); int i; for(i=n-1;i>=n-h;i--) t[i]=1; print(); if(cas) printf("/n"); } return 0; }

你可能感兴趣的:(ini,distance)