排列2

来源:互联网 发布:sql union后字段为空 编辑:程序博客网 时间:2024/06/06 11:33

题目其实就是对4张卡做全排列,简单深度搜索。坑爹的是输出格式问题。写的很匆忙,TT很挫!

#include <iostream>#include <cstdio>#include <cstring>#include <map>#include <algorithm>using namespace std;int a[4],b[4],v[100],r[100],t,c[10][100];bool f[4];void check(){v[t++]=b[0]*1000+b[1]*100+b[2]*10+b[3];}void dfs(int k){if(k==4){check();return;}for(int i=0;i<4;i++){if(!f[i]){f[i]=1;b[k]=a[i];dfs(k+1);f[i]=0;}}}int main (){int i,j,fff=0;while(cin>>a[0]>>a[1]>>a[2]>>a[3]){if(a[0]==0 && a[1]==0 && a[2]==0 && a[3]==0) break;if(fff) cout<<endl;t=0;memset(f,0,sizeof(f));dfs(0);/*for(int i=0;i<t;i++)cout<<v[i]<<endl; */sort(v,v+t);char s[5],s1[5];int u=0;for(i=0;i<t;i++){itoa(v[i],s,10);itoa(v[i+1],s1,10);if(strlen(s)<4) continue;else if(v[i]==v[i+1]) continue;else if(s[0]==s1[0])  r[u++]=v[i];else {r[u++]=v[i];r[u++]=-1;}}int ff=0;memset(c,0,sizeof(c));for(i=0;i<u;i++){if(r[i]!=-1) c[ff][++c[ff][0]]=r[i];else ff++;}for(i=0;i<ff;i++){for(j=1;j<=c[i][0];j++){if(j==c[i][0]) cout<<c[i][j]<<endl;else cout<<c[i][j]<<' ';}}fff++;}return 0;}