社区
C++ 语言
帖子详情
一个排列组合的问题,在线等,马上结贴????
yszmax
2004-11-22 02:28:01
从N个数中任取m个进行排列,有几种?
...全文
686
11
打赏
收藏
一个排列组合的问题,在线等,马上结贴????
从N个数中任取m个进行排列,有几种?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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();
}
很漂亮的中国结背景,很实用的
这是几张关于中国结的图片,比较适合作为背景用,也可以作为贺卡的素材的
WinXP技巧小结
WinXP技巧小结,小的技巧
巧用wps动画制作仿Windows 7对话框.docx
巧用wps动画制作仿Windows 7对话框.docx
Matlab期末大作业
这是
一个
具有多种功能的图像处理和游戏系统。 这个系统里有个bug。
室内装修验收规范.doc
室内装修验收规范.doc
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章