题意显而易见,不说了。。注意下排列的顺序就好,。。用的是库函数。。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[4],i;
int cas=0;
while(scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3])!=EOF)
{
if(a[0]==0&&a[1]==0&&a[2]==0&&a[3]==0)break;
if(cas!=0)
cout<<endl;
cas++;
sort(a,a+4);
int count=0;
for(i=0;i<4;i++)
{
if(a[i]==0)
count++;//用于计算有几个0,下面把不是0的第一个数字和a[0]交换。。
}
if(count==1)
{
swap(a[0],a[1]);
}
if(count==2)
{
swap(a[0],a[2]);
}
if(count==3)
{
swap(a[0],a[3]);
}
for(i=0;i<4;i++)
cout<<a[i];//先输出第一组
int t=a[0];//用于判断千位数字的改变,如果变大了就要换行
while(next_permutation(a,a+4))//next_permutation(a,a+4)这个函数是显示a数组的下个字典序排列。。
{
int flag=0;
if(t<a[0])
{
t=a[0];
cout<<endl;
flag++;
}
if(flag==0)
cout<<" ";
for(i=0;i<4;i++)
cout<<a[i];
}
cout<<endl;
}
return 0;
}