全排列-hdu1716

题目描述:

题目意思很简单,就是要我们输出全排列后的数据组成,但是要注意组成的数据是一个实数,并且千位数字相同的处在同一行中。

代码实现:

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a[4],t=0;
    int b[24];
    while(~scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3])&&a[0]+a[1]+a[2]+a[3])
    {
        if(t!=0)//用于每一组数据前的空行,而第一组数据前是没有空行的
        {
            printf("\n");
        }
        t=1;
        sort(a,a+4);
        int i=0;
        do
        {
            if(a[0]!=0)//因为a[0]总是会因为next_permutation()函数而更新,所以当a[0]不为0时,就可以执行该函数
            {
                    b[i++]=a[0]*1000+a[1]*100+a[2]*10+a[3];
            }
        }while(next_permutation(a,a+4));
        for(int j=0;j<i;j++)
        {
            if(j==i-1)
                printf("%d\n",b[j]);
            else if(b[j]/1000==b[j+1]/1000)//保证千位数字相同的在同一行
            printf("%d ",b[j]);
            else
                printf("%d\n",b[j]);
        }
    }
    return 0;
}

 

posted @ 2018-11-21 09:29  里昂静  阅读(267)  评论(0编辑  收藏  举报