一个排列组合的问题,在线等,马上结贴????

yszmax 2004-11-22 02:28:01
从N个数中任取m个进行排列,有几种?
...全文
649 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzheng318 2004-11-22
  • 打赏
  • 举报
回复
ok
以发,请查收, 结帖给分!
yszmax 2004-11-22
  • 打赏
  • 举报
回复
感谢!!!!!!
yszmax 2004-11-22
  • 打赏
  • 举报
回复
噢,万分感谢!
以前我也看过的,但是马上要交了,来不及了,大家不要bs我。
能把代码发给我吗?yszmax@chinaren.com,注释不乱码的。谢谢
xuzheng318 2004-11-22
  • 打赏
  • 举报
回复
#include <stdio.h>
// N个数的全排列:

typedef void (*MyOutputFunc)(int numb, char out[]);

void Iterate(int n, char in[], char out[], int nmax, int& numb, MyOutputFunc f)
{
if( n == 0 )
{
f(numb++, out);
return;
}
for(int i = 0; i < nmax; i++)
{
if( in[i] != -1 )
{
out[nmax-n] = in[i];
in[i] = -1;
Iterate(n-1, in, out, nmax, numb, f);
in[i] = out[nmax-n];
}
}
}

void PrintP(int numb, char out[])
{
printf("[%08d]: %s\n", numb, out);
}

#define MAX 62
main()
{
char in[MAX+1], out[MAX+1];
int numb = 0;
for( int i = 0; i < MAX; i++ )
{
if( i < 26 ) in[i] = 'a'+i;
else if( i < 52 ) in[i] = 'A'+i-26;
else in[i] = '0'+i-52;
out[i] = -1;
}
in[i] = out[i] = 0;
Iterate(MAX, in, out, MAX, numb, PrintP);
printf("\nAll items are %d\n", numb);
return 0;
}
carylin 2004-11-22
  • 打赏
  • 举报
回复
输入每个元素的值。英语很烂,呵呵……

以前写的
Flood1984 2004-11-22
  • 打赏
  • 举报
回复
n(n-1)(n-2)*...(n-m+1)种
yszmax 2004-11-22
  • 打赏
  • 举报
回复
carylin(别信我,我在说谎) ( )
牛人,好快
yszmax 2004-11-22
  • 打赏
  • 举报
回复
please input elem of a ?
是什么意思啊 ?
carylin 2004-11-22
  • 打赏
  • 举报
回复
注释乱码了,楼主自己改改好了。
yszmax 2004-11-22
  • 打赏
  • 举报
回复
up
carylin 2004-11-22
  • 打赏
  • 举报
回复
以前写的,不知合适不
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<iomanip.h>

void inition(int k,int number[]) //³õʼ»¯
{
int i;
for(i=0;i<k;i++) //Ò»¿ªÊ¼ÏÈÑ¡¶¨Ç°k ¸öÔªËØ
number[i]=1;
}

void output(int a[],int n,int number[],int **b,int count)
//Êä³öÒ»ÖÖ×éºÏ½á¹û
{
int i,k=0;
for(i=0;i<n;i++)
if(number[i]){
b[count][k]=a[i];
k++;
cout<<setw(3)<<a[i];
}
cout<<endl;
}

void main()
{
int count=0; //¼ÆÊý×éºÏ¸öÊý
int n=6,k=4,size=15,i,j,l,m;
int number[100]={0}; //¸¨ÖúÊý×é,¼Í¼±»Ñ¡ÖеÄÔªËØ
//ÕâÀﶨÒå×î¶àÔªËØΪ100
int *a;
int **b;
bool findfirst,end=false,swap;

cout<<"please input n:"<<endl;
cin>>n; //ÊäÈëÊý×é´óСn
a=new int[n];

cout<<"please input elem of a:"<<endl;
for(i=0;i<n;i++)
cin>>a[i]; //ÊäÈëÊý×éÔªËØ
cout<<"please input k(<n):"<<endl;
cin>>k; //ÊäÈëm
size=1;

for(i=0,j=n;i<k;i++) size*=j--;
for(i=1;i<=k;i++) size/=i;

b=new int*[size]; //·ÖÅä±£´æ½á¹ûµÄ¶þάÊý×é
for(i=0;i<size;i++) b[i]=new int[k];
inition(k,number); //³õʼ»¯

output(a,n,number,b,count);
count++; //µÚÒ»×é½á¹ûÊä³ö
j=n;

while(!end)
{
findfirst=false;
swap=false; //±êÖ¾¸´Î»
for(i=0;i<j;i++)
{
if(!findfirst && number[i])
{
l=i; //l ¼Ç¼ÏÂɨÃèµ½µÄµÚÒ»¸öÊý
findfirst=true; //ÉèÖñêÖ¾
}
if(number[i] && !number[i+1]) //´Ó×óµ½ÓÒɨÃèµÚÒ»¸ö¡°10¡±×éºÏ
{
number[i]=0;
number[i+1]=1;
swap=true; //ÉèÖý»»»±êÖ¾
for(m=0;m<i-l;m++)
number[m]=number[m+l];
for(m=i-l;m<i;m++)
number[m]=0; //½»»»ºó½«Ö®Ç°µÄ¡°1¡±È«²¿Òƶ¯µ½×î×ó¶Ë
if(l==i && i+1==n-k) //Èç¹ûµÚÒ»¸ö¡°1¡±ÒѾ­Òƶ¯µ½ÁËm-n
end=true; //µÄλÖã¬ËµÃ÷ÕâÊÇ×îºóÒ»¸ö×éºÏÁË¡£
}
if(swap) //½»»»Ò»´Îºó¾Í²»ÓüÌÐøÕÒ¡°10¡±×éºÏÁË
break;
}
output(a,n,number,b,count);
count++;
}

cout<<"total number is: "<<count<<endl; //´òÓ¡×ܵÄ×éºÏÊý
getch();
}

64,685

社区成员

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

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