题意显而易见,不说了。。注意下排列的顺序就好,。。用的是库函数。。

#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;
}

posted on 2012-02-04 20:18  →木头←  阅读(266)  评论(0编辑  收藏  举报