题目链接:点击打开链接
next_permutation要用do_while形式,不然会落下初始的排列,返回值是是否有下一个比当前数字典序高的排列
每组数据间有空行,行尾无空格要注意。
代码:
#include
#include
#include
#include
using namespace std;
int a[5];
bool vis[5];
int main(){
bool flag=0;
while(~scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[4])){
if(!a[1]&&!a[2]&&!a[3]&&!a[4]) break;
sort(a+1,a+5);
int t=-1;
do{ if(!a[1])continue;
if(a[1]!=t){
t=a[1];
if(!flag) flag=1;
else
printf("\n");
}
else printf(" ");
for(int i=1;i<=4;i++){
printf("%d",a[i]);
}
}while(next_permutation(a+1,a+5));
printf("\n");
}
return 0;
}