这就是一个全排列,他妈的格式化输出太恶心人了,注意:每次数据输出后有一个空行,但是! 0 0 0 0前面的那个数据没有空行。
因为要去重 用set
code:
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
using namespace std;
int a[5];
int book[5];
int ans[5];
int con[30];
set<int> vec;
void dfs(int step){
for(int i=0;i<4;i++){
if(book[i]==0){
book[i]=1;
ans[step]=a[i];
dfs(step+1);
book[i]=0;
}
}
if(step==3){
if(ans[0]!=0)
{vec.insert(ans[0]*1000+ans[1]*100+ans[2]*10+ans[3]);}
return ;
}
}
void print(){
int t=1;
int cnt=1;
for(set<int>::iterator it=vec.begin();it!=vec.end();it++){
if(cnt==1) printf("%d",*it);
else if(t!=*it/1000) {
printf("\n");printf("%d",*it);}
else {
printf(" %d",*it);
}
t=*it/1000;
// cout<<"****"<<t<<endl;
cnt++;
}
}
int main(){
cin>>a[0]>>a[1]>>a[2]>>a[3];
while(1){
vec.clear();
if(a[0]==0 && a[1]==0 && a[2]==0 && a[3]==0) break;
memset(book,0,sizeof(book));
memset(ans,0,sizeof(ans));
dfs(0);
print();
cout<<endl;
// cout<<endl<<endl;
cin>>a[0]>>a[1]>>a[2]>>a[3];
if(a[0]==0 && a[1]==0 && a[2]==0 && a[3]==0) break;
cout<<endl;
}
return 0;
}