/*
现有四张卡片,用这四张卡片能排列出很多不同的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]!&#
求出排列组合的递归方法(C++)
最新推荐文章于 2024-07-15 20:17:23 发布
本文介绍了一种使用C++编程语言通过递归方法求解四张卡片排列组合成4位数的问题。代码中定义了一个递归函数`permute()`,用于生成所有可能的排列,并将结果存储在数组`m`中。在主函数中,程序读取四张卡片的数值,对输入进行排序,然后调用`permute()`函数,最后按照从小到大的顺序输出无重复数字的4位数。
摘要由CSDN通过智能技术生成