N个元素的全排列

采用递归的方式,代码如下

//C++中函数如不先声明,则被调函数必须先于调用函数
#include<iostream> using namespace std; char input[50]; int n;
//交换数字
void swap(char *a,char *b) { char temp=*a; *a=*b; *b=temp; }
//打印一次排列结果
void printResult() { for(int i=0;i<n;++i) { cout<<input[i]; } cout<<endl; }
//核心代码,递归实现全排列
void arrange(int m) { if(m==n-1) { printResult(); }else{ for(int i=m;i<n;i++) {
//每个需要排列的元素都需要打头 swap(
&input[m],&input[i]); arrange(m+1); swap(&input[m],&input[i]); } } } int main(int argc, char const *argv[]) { char temp;
//输入函数
while((temp=cin.get())!='\n') { if (temp>='0'&&temp<='9') { input[n++]=temp; }else { cout<<"Invalid input"<<endl; return 0; } } arrange(0); return 0; }

 

转载于:https://www.cnblogs.com/Bird-Man/p/4357844.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值