打印123456789这9个数字的全排序列!
打印123456789这9个数字的全排序列!
即把9×8×7×6×5×4×3×2这么多种可能排列情况全打印出来该怎么做?
用for和continue的闪!
问题点数:20、回复次数:8Top
1 楼pcboyxhy(-273.15℃)回复于 2005-04-03 22:09:31 得分 5
#include <stdio.h>
#include <stdlib.h>
char used[10]={0};
int number[10]={1,2,3,4,5,6,7,8,9}, len=9, i, p[10];
void output()
{
printf("\n");
for(i=0; i<len; ++i)
printf("%d ", number[p[i]]);
}
int pailie(int n)
{
int ii;
if(n==len)
output( );
for(ii=0; ii<len; ++ii)
if(!used[ii])
{
used[ii] = 1;
p[n] = ii;
pailie(n+1);
used[ii] = 0;
}
return 0;
}
int main(int argc, char *argv[])
{
pailie(0);
system("PAUSE");
return 0;
}
Top
2 楼AtaLoss0202(星空天宇)回复于 2005-04-03 22:14:18 得分 1
可以用while吗?别说连循环都不能用.那这种明显的循环规律性的东西,偶还真不知道还能怎么实现.Top
3 楼net_fogprince(韶华)回复于 2005-04-03 22:20:34 得分 1
用排列的生成算法如:字典序法Top
4 楼heroboy2000(动感超人)回复于 2005-04-04 07:43:20 得分 3
int num[]={1,2,3,4,5,6,7,8,9};
sort(num,num+9);
do
{
print(num);
}while(next_permutation(num,num+9));
使用STL的next_permutation算法Top
5 楼xjp6688(大平/要做必须最好)回复于 2005-04-04 07:44:32 得分 1
www.vcok.comTop
6 楼superspeed2005()回复于 2005-04-04 09:06:08 得分 3
template<class T>
void fun( T a[], int l,int h )
{
if ( a == h )
for( int i = a; i < h; i++ )
cout << a[ i ];
else
for ( int j = l; j < h; j++ ){
swap( a[ j ], a[ l ] );
fun( a, l+1, h );
swap( a[ j ], a[ l ] );
Top
7 楼superspeed2005()回复于 2005-04-04 09:07:35 得分 1
}
大概这样
用递归,数据结构开篇就有。Top
8 楼junguo(junguo)回复于 2005-04-04 09:30:45 得分 5
#include <iostream>
using namespace std;
template<class T>
void Perm(T list[], int k, int m)
{ / /生成list [k:m ]的所有排列方式
int i;
if (k == m) {//输出一个排列方式
for (i = 0; i <= m; i++)
cout << list [i];
cout << endl;
}
else // list[k:m ]有多个排列方式
// 递归地产生这些排列方式
for (i=k; i <= m; i++) {
Swap (list[k], list[i]);
Perm (list, k+1, m);
Swap (list [k], list [i]);
}
}
template <class T>
inline void Swap(T& a, T& b)
{
T temp = a; a = b; b = temp;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9};
Perm(a,0,8);
while(1);
}Top




