求一段代码
从n个数中选取m个数来排列,并且打印出符合条件的结果(每组中1,2,3中最少有1个, 但1,2,3都有的除外)
[解决办法]
不重复版
- C/C++ code
#include<stdio.h> #include <string.h>char s[20],t[20];char b[20];int n,m;int check(){ char used[128]; memset(used,0,sizeof(used)); for(int i=0;i<m;i++) used[t[i]]=1; if(!used['1']&&!used['2']&&!used['3']) return 0; if(used['1']&&used['2']&&used['3']) return 0; return 1;}void get(int k){ if(k==m) { if(check()) { t[k]=0; printf("%s\n",t); } return; } for(int i=0;i<n;i++) { if(!b[i]) { b[i]=1; t[k]=s[i]; get(k+1); b[i]=0; } }}int main(){ while(scanf("%s %d",s,&m)) { n=strlen(s); get(0); printf("\n"); }}