/*
现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。
*/
////递归方法求排列组合数
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
#define MAX 5
int used[MAX]={0},p[MAX];
int a[MAX],m[24]={0},k=0;
void permute(int pos)//递归函数
{
int i;
if(4==pos)//找到一个排列情况
{
m[k++]=1000*p[0]+100*p[1]+10*p[2]+p[3];
}
else
{
for(i=0;i<4;i++)
{
if(!used[i])
{
used[i]=1;
p[pos]=a[i];
permute(pos+1);
used[i]=0;
}
}
}
}
int main()
{
freopen("in.txt","r",stdin);
int flag=0;
while(cin>>a[0]>>a[1]>>a[2]>>a[3])
{
if(!(a[0]||a[1]||a[2]||a[3]))
break;
if(flag==1)cout<<endl; //除最后,每个样例有空行
flag=1;
sort(a,a+4);
permute(0);
sort(m,m+k);
int i=0,x[24],count=0;
while(m[i]<1000)
{
i++;
}
while(m[i]!=0&&m[i]>=1000)
{
if(m[i]!=m[i-1]) //注意这四个数字可能有相同的,如:1 1 2 3
x[count++]=m[i];
i++;
}
cout<<x[0];
for(i=1;i<
求出排列组合的递归方法(C++)
最新推荐文章于 2025-06-07 14:49:47 发布