从m中任取n个数

来源:百度知道 编辑:UC知道 时间:2024/09/25 08:22:55
编写一个程序需要一个函数,它的功能是从m个数中任意取n个数,并且对于取出的数能索引到它在m中的位置,希望某位高手不吝赐教。谢谢了!
这个问题有C(n,m)种情况,对于每种情况都能找到在索引。举个例子说,在16个数里找8个数,用rand()%m,并且使这8个数各不相等,但似乎用时间随机只能找到C(8,16)一种情况,要找出所有的情况,那要试很多次,并且这次的组合和上次的组合还不知想不想等?
希望哪个能提供算法,最好是源程序!

给出A(n,m)和C(n,m)

排列

#include "iostream.h"
int m,n,total;
void Function(int* p,int* flag,int** base,int num)
{
for(int i=0;i<m;i++)
if(!flag[i])
{
flag[i]=1;*base=p+i;
if(num==1)
{
cout<<"第"<<++total<<"组\n";
cout <<"位置: ";
for(int i=0;i<n;i++)
cout <<"<"<<int((base-n+1)[i]-p+1)<<"> ";
cout <<"\n数值: ";
for(int i=0;i<n;i++)
cout <<" "<<(base-n+1)[i][0]<<" ";
cout <<endl<<endl;
}
else
Function(p,flag,base+1,num-1);
flag[i]=0;
}
}
main()
{
cout <<"请输入总数m的个数\n";
cin >>m;
int *p=new int[m],*flag=new int[m];
for(int i=0;i<m;i++)flag[i]=0;

如何用C++实现从m个数当中选n个组合 从n个数中取出m个最大的最好的算法是什么? 设M={a,b,c},N={-1,0,1},求从M到N的映射个数,过程谢谢 从N个数中第一次取出n个,放回,第二次取出m个,求两次取出相同的数x 的概率, 满足|mn|+|m-n|-1=0的整数对(m,n)的个数为多少? 从键盘输入n个数,求这n个数的和并输出。C语言怎么编??? 编写C语言 (输入N个数,N>5,将这N个数从大到小排列) 已知集合M={a,b,c},N={-1,0,1},从M到N的映射f满足f(a)+f(b)+f(c)=0,那么映射f的个数为? 已知集合M={a,b,c},N={-1,0,1},从M到N的映射f满足f(a)=f(b)=f(c),那么映射f的个数为? 有n个整数,使前面个数数顺序向后一m个位置,移出的数再从开头移入。