有人机交互能力的排列组合算法(C++版)
来源:互联网 发布:旅行者金唱片 知乎 编辑:程序博客网 时间:2024/06/06 01:11
我写了三个不同的版本,但其实核心都是一样的,第一个版本是用户输入M和N,
不用输入实际参加排列组合的数.
第二个和第三个版本要输入用户想要参加排列组合的数,
不同在于函数的参数上,第二个是定义了一个全局数组,
所以核心函数jisuan()的参数没有改变,而第三个是定义了一个局部变量,
所以在jisuan()的参数中加上了一个数组参数,大家看了就知道了.
//第一个
#include <iostream>
using namespace std;
void jisuan(int a[],int m,int n,int k,int temp);
int numOfComb(int m, int n);
void main()
{
int m,n;
cout<<"请输入M和N:"<<endl;
cin>>m>>n;
cout<<"一共 "<<numOfComb(m,n)<<" 种组合"<<endl;
int a[100];
jisuan(a,m,n,-1,-1);
}
void jisuan(int a[],int m,int n,int k,int temp)
{
temp++;
if(temp<n)
for(int i=k+1;i<m;i++)
{
a[temp]=i+1; //赋值
jisuan(a,m,n,i,temp); //递归调用
}
else
{
for(int j=0;j<n;j++)
{
cout<<"/t"<<a[j]; //输出
}
cout<<endl;
}
}
//计算个数
int numOfComb(int m, int n)
{
int r=1;
int i;
for(i=1; i<=n; ++i)
{
r *= (m-i+1);
r /= i;
}
return r;
}
//第二个
#include <iostream>
using namespace std;
void jisuan(int a[],int m,int n,int k,int temp);
int numOfComb(int m, int n);
int comb[100];
void main()
{
int m,n;
int i=0;
cout<<"请输入要参加排列组合的数(以 -1 结束):"<<endl; //注意参加排列组合的数不能有-1,如果非要有-1
cin>>comb[i]; //可以把这个条件改一改
while(comb[i]!=-1)
{
i++;
cin>>comb[i];
}
m=i;
if(comb[0]==-1)
{
exit(0);
}
cout<<"请输入要提取的个数 n:"<<endl;
cin>>n;
cout<<"一共 "<<numOfComb(m,n)<<" 种组合"<<endl;
int a[100];
jisuan(a,m,n,-1,-1);
}
void jisuan(int a[],int m,int n,int k,int temp)
{
temp++;
if(temp<n)
for(int i=k+1;i<m;i++)
{
a[temp]=i+1; //赋值
jisuan(a,m,n,i,temp); //递归调用
}
else
{
for(int j=0;j<n;j++)
{
cout<<"/t"<<comb[a[j]-1]; //输出
}
cout<<endl;
}
}
//计算个数
int numOfComb(int m, int n)
{
int r=1;
int i;
for(i=1; i<=n; ++i)
{
r *= (m-i+1);
r /= i;
}
return r;
}
//第三个
#include <iostream>
using namespace std;
void jisuan(int a[],int m,int n,int k,int temp,int com[]);
int numOfComb(int m, int n);
void main()
{
int m,n;
int i=0;
int comb[100];
cout<<"请输入要参加排列组合的数(以 -1 结束):"<<endl;
cin>>comb[i];
while(comb[i]!=-1)
{
i++;
cin>>comb[i];
}
m=i;
if(comb[0]==-1)
{
exit(0);
}
cout<<"请输入要提取的个数 n:"<<endl;
cin>>n;
cout<<"一共 "<<numOfComb(m,n)<<" 种组合"<<endl;
int a[100];
jisuan(a,m,n,-1,-1,comb);
}
void jisuan(int a[],int m,int n,int k,int temp,int com[])
{
temp++;
if(temp<n)
for(int i=k+1;i<m;i++)
{
a[temp]=i+1; //赋值
jisuan(a,m,n,i,temp,com); //递归调用
}
else
{
for(int j=0;j<n;j++)
{
cout<<"/t"<<com[a[j]-1]; //输出
}
cout<<endl;
}
}
//计算个数
int numOfComb(int m, int n)
{
int r=1;
int i;
for(i=1; i<=n; ++i)
{
r *= (m-i+1);
r /= i;
}
return r;
}
这三个程序我在编程中国论坛上也发表了,发贴人叫"冰的热度",其实就是我.
大家不要大惊小怪,yonghengzhimi和"冰的热度"是一个人,就是我
- 有人机交互能力的排列组合算法(C++版)
- 有人机交互能力的排列组合算法(C++版)
- 终于有个高效率的排列组合算法
- {C语言算法}排列组合
- C++:排列组合算法
- 排列组合的递归算法
- 排列组合的算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 排列组合的算法
- 排列组合的高效算法
- 排列组合的算法
- 排列组合的算法
- Linux性能分析工具(vmstat,iostat,sar)
- asp.net 页面事件:顺序与回传
- 如何得到 .NET Framework 安装的文件夹?
- .NET中的强名称机制
- 35岁成功人的12条黄金法则
- 有人机交互能力的排列组合算法(C++版)
- 有人机交互能力的排列组合算法(C++版)
- ASP.NET页面处理细节
- Apache参数设置
- 深度探究Unix现状与未来
- 有一种爱叫"守口如瓶"
- VC6调试技巧
- 闷
- 分析Windows和Linux动态库