1,2,3,4,5全排列。输出12345,15234之类的

wx376752150 2010-04-02 09:54:24
虽然我知道用递归,对递归的理解也不错,但是让我手动些个递归出来还是不行啊!大侠赐教啊
...全文
895 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
a554187160 2011-05-10
  • 打赏
  • 举报
回复
递归总是感觉不好理解啊
走好每一步 2010-04-02
  • 打赏
  • 举报
回复
如果不是递归问题,那是楼主还没找到一个办法表达集合,实现集合元素的增减。
我第一次看全排列程序的时候,觉得很神奇!
x642458 2010-04-02
  • 打赏
  • 举报
回复
可以用STL的next_permutation,又快又方便
HelloDan 2010-04-02
  • 打赏
  • 举报
回复
it can use a bitset to output it.
cnpws 2010-04-02
  • 打赏
  • 举报
回复
已有代码了,我是来接分的
nut799 2010-04-02
  • 打赏
  • 举报
回复
http://blueidea.bokee.com/3371903.html
lovesi3344 2010-04-02
  • 打赏
  • 举报
回复
牛人如此众多

占座留名
fangligen 2010-04-02
  • 打赏
  • 举报
回复
简单的递归,很容易啊
only_delusion 2010-04-02
  • 打赏
  • 举报
回复
-->这么多人回答了 我就留个言 赚分吧
这种题应该自己试着写一个 费点力气写东西 才会有收获
hrjhrj12345 2010-04-02
  • 打赏
  • 举报
回复

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int LENGTH; //数组的长度
int Line=1; //用来作输出的格式控制标志
int TOTAL=0; //全排列的总数
char *Array; //用来辅助输出的全局数组

void Swap(char &ch1, char &ch2); //交换两个单元的值的函数
void ArraySort(char array[], int n); //进行全排列的递归函数

void main()
{
//得到数组长度
cout<<"请输入数组的长度(建议>1 && <10): ";
cin>>LENGTH;

//得到格式化输出标志
for ( int j=2; j<LENGTH; j++ )
Line*=j;

//数组的初始化
Array=new char[LENGTH+1];
char *array=new char[LENGTH];

for ( int i=0; i<LENGTH; i++ )
array[i]='A'+i;

//调用递归函数并输出
ArraySort( array, LENGTH );
cout<<"\nTotal:"<<TOTAL<<endl<<endl;

delete [] Array;
delete [] array;
//system("pause");
}

void Swap(char &ch1, char &ch2)
{
ch1+=ch2;
ch2=ch1-ch2;
ch1-=ch2;
}

void ArraySort(char array[], int n)
{
//递归的终止点,只要数组中的元素个数为1,则结束递归并输出一个排列
if ( n==1 )
{
Array[LENGTH-n]=array[0]; //将数组中的最后一个元素放入输出数组
Array[LENGTH]='\0';
cout<<Array<<'\t';
TOTAL++;
if ( !(TOTAL%Line) )
cout<<"\n--------------\n";
return ;
}

//为了保证初始数组array不变,构建临时数组T_array代替
char *T_array=new char[n];

for ( int i=0; i<n; i++ )
{
//将array数组赋给T_array
int j;
if ( i==1 )
goto Nochange;
for ( j=0; j<n; j++ )
T_array[j]=array[j];

if ( i==0 )
{
Array[LENGTH-n]=T_array[0];
ArraySort( &T_array[1], n-1 );
continue;
}
Nochange:
//将数组中第一个元素与第i元素交换,并放入输出数组中,达到排列的目的
Swap( T_array[0], T_array[i] );
Array[LENGTH-n]=T_array[0];

//调用递归函数进行除T_temp[0]外所有函数的全排列
ArraySort( &T_array[1], n-1 );
}

delete [] T_array; //释放临时数组T_array,防止泄漏
}
selooloo 2010-04-02
  • 打赏
  • 举报
回复

#include <stdio.h>
int N,M,k,total;
char lword[]="abc",word[3];
void Chose(int a1,int a2)
{
int i;
if(0==a2){
for(i=0;i<M;i++)
printf("%d",word[i]);
printf("\n");
total++;
return;}
for(i=1;i<=N;i++)
{
word[k++]=i;
Chose(a1+1,a2-1);
k--;
}
}
int main(void)
{
M=5;
N=5;
Chose(1,5);
printf("total=%d\n",total);
getchar();
return 0;
}
xiuxianshen 2010-04-02
  • 打赏
  • 举报
回复
帮顶,楼下空的贴代码

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧