用递归实现从n个不同元素中取r个(1<r<=n)元素与另外m个相同元素组成的复杂排列,求代码🙏

作者&投稿:虞咏 (若有异议请与网页底部的电邮联系)
vb调用子程序,求从m个元素中取出n个元素的排列组合~

Private Sub Command1_Click()Print c(2, 4), c(0, 0)End SubPublic Function f(x As Integer) As LongIf x <= 1 Thenf = 1Elsef = x * f(x - 1)End IfEnd FunctionPublic Function p(x As Integer, y As Integer) As Longp = f(y) / f(y - x)End FunctionPublic Function c(x As Integer, y As Integer) As Longc = f(y) / f(y - x) / f(x)End Function

设第i个物品取了xi次,所求组合数等于x1+...+xn=r的非负整数解数,等于y1+...+yn=r+n的正整数解数(yi=xi+1),等于r+n个球中插n-1个隔板将其分成n份的插法数,等于C[r+n-1,n-1]。

C(4,2)=(4*3)÷(2*1)=6

组合(combination)是一个数学名词。一般地,从n个不同的元素中,任取m(m≤n)个元素为一组,叫作从n个不同元素中取出m个元素的一个组合。我们把有关求组合的个数的问题叫作组合问题。

组合的计算公式: 

向左转|向右转

 ;C(n,m)=C(n,n-m)。(n≥m)

排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。

排列组合中相关公式如下:

向左转|向右转



#include <reg52.h>

#define uint unsigned int

/* ********************************************* */
// 函数名称: delay()
// 函数功能:毫秒延时
/* ********************************************* */

void delay(uint z)
{
uint x,y;
for(x = 0; x < z; x++)
for(y = 0; y < 113; y++);
}

/* ***************************************************** */
// 函数名称:main()
// 函数功能:实现流水灯效果
// 入口参数:无
// 出口参数:无
/* ***************************************************** */

void main(void)
{
int i; //循环变量
while(1)
{
P2 = 0xff; //设定LED灯初始值
delay(1000);
for(i = 0;i < 8;i++)
{
P2 = P2 << 1; //移位、依次点亮
delay(1000); //延时
}
}


设计递归算法生成n个元素的所有排列对象
if(n==1)return 1;else return count(n-1)*n;} int pow10(int n)\/\/算出10的n次方 { int a;if(n==0)return 1;else for(int i=1;i<=n;i++)a=10*pow10(n-1);return a;} int * comm(int n)\/\/组合n!个数(这里用递归算){ int *a=new int[count(n)];if(count(n)...

利用递归求n个数中的最大数
include <stdio.h> int main(){ int max(int x, int y);int Rand_Num[100]={0,1,2,3,4,5,6,7,8,9,10}, Size=10;int Num;for(int i=0;i<Size;i++)Num=max(Rand_Num[i],Rand_Num[i+1]);printf("Max Num is:%d\\n",Num);return 0;} int max(int x, int y){ ...

java中,用递归方法求n个数的无重复全排列,n=3。
\/\/ 递归过程中用到的辅助变量,used[i]表示第i个元素是否已使用 int[] cur; \/\/ 保存当前的排列数 \/\/ 递归打印无重复全排列,当前打印到第idx位 void print_comb(int idx) { if(idx == n) { \/\/ idx == n时,表示可以将cur输出 for(int i = 0; i < n; ++...

c++编程 从n个数中选出m个数进行组合
...对于n-N个数,同样有 先从n-N个数中选一个数出来,然后在剩下的n-N个数当中选取m-N个数进行组合 如此递归 直到m-N==1为止 当m-N为1的时候,自然不用选了 每次选取的结果放入一个数组当中,作为参数传递下去 当递归到m-N为1的时候,数组和当前选定的值即构成一个有效组合,便可输出...

c语言:采用分治法递归求含n个数的某个序列的最大元素和次大元素。_百度...
high -low 为奇数,这个mid是小数。(1)数组个数为n,还用a[n](2)还不如直接用个for循环,将max=0 include <stdio.h> define N 21 int max(int a,int b){ if(a>b)return a;return b;} int getM(int * a,int l,int u){ if(u==l)return a[u];else{ return max(getM(...

用递归的方法把数组中的N个数按倒的次序重新排列
include "stdio.h"void reverse(int a[],int n){ int t;if (n==1)return;t=a[0];for (int i=0;i<n-1;i++){ a[i]=a[i+1];} a[n-1]=t;reverse(a,n-1);return;} void main(){ int a[10];int i;a[0]=1;for (i=0;i<10;i++){ a[i]=a[i-1]+i;} pr...

一个简单的C语言题。用递归实现n!+(n-1)!+(n-2)!+...+2!+1!
include<stdio.h>double fac(int n){if(n==0)return 1.0; return n*fac(n-1);}double sum(int n){if(n==1)return 1.0; return fac(n)+sum(n-1);}int main(){int n; scanf("%d",&n); printf("%.0lf\\n",sum(n)); return 0;} ...

C语言编程,用递归法将一个正整数n的每个数字都拆分出来,数字前后都标 ...
给你个代码:include<stdio.h>void f(int n){if (n){if(n<10){printf("*%d*",n);return;}f(n \/ 10);printf("%d*", n % 10);}}int main(){ int n;printf("输入一个正整数:");scanf("%d", &n);f(n);return 0;} ...

C++编写程序,输入数n,输出n个字符的全排列,通过函数递归实现。
for (size_t j = 0; j != tmp.size(); ++j){ res.push_back(str[i] + tmp[j]); } } } else{ res.push_back(str); } return res;}int main(){ size_t n; cout << "n = "

算法题:从{1,2,3...N}个元素组成不同的子集合,写不出来感觉有递归和循...
一个集合含有n个元素,则称它为n元集。一个n元集的子集有2^n。(0)零元集,即空集,有C(n,0)个。(1)一元集:有n个。(2)二元集:有C(n,2)个。...(k)k元集:有C(n,k)个。...(n)n元集:有C(n,n)个。总共有 C(n,0)+C(n,1)+...+C(n,k)+...C(n,n)=2^n ...

同心县13253457533: 组合与排列的规律 -
郑殃复方: 排列定义 从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列.排列的全体组成的集合用 P(n,r)表示.排列的个数用P(n,r)表示.当r=n时称为全排列.一般不说可重即无重.可重排列的相应记号为 P(n,r),P(n,r)....

同心县13253457533: 在(x - 1)(x+1)^8的展开式中x^5的系数是? -
郑殃复方: 用C(n,r)表示从n个不同的元素中取r个元素的组合数.解:(1+x)^8的通项为C(8,r)x^r.所以x^5的系数是C(8,4)+(-1)C(8,5)=14(x-1)(x+1)^8中 x^5是由(x+1)^8中的x^4和x^5分别与(x-1)中的x,-1相乘产生的,根据二项式定理,x^4和x^5系数分别是C(8,4)和C(8,5).所以x^5的系数为C(8,4)+(-1)C(8,5)=14

同心县13253457533: 0到9可以排列多少组4位数 数字不重复 不能同时有1234 4321 2314 3214 这样的 -
郑殃复方: C10 4=10*9*8*7*/(1*2*3*4)=2100到9可以排列210组4位数 数字不重复 不能同时有1234 4321 2314 3214 这样的

同心县13253457533: 某班共有42人若每两个同学互相握一次手,则每个同学需握多少次手?全班同学需握多少次手?{另加公式}.
郑殃复方: 今天有时间,我就从统计学专业的角度给你解析一下你的问题. 你提出的问题,是典型的排列、组合问题. 问题1.每个同学需握多少次手?--排列问题 问题2.全班同学需握多少次手?--组合问题 对于问题1 可以理解为,同学A与全班其它41名同...

同心县13253457533: 数学均等分布与不均等分布数学中的排列组合中的 均分 与 不均分 -
郑殃复方:[答案] 1.排列及计算公式 从n个不同元素中,任取m(m≤n)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 p(n,m...

同心县13253457533: 编程:全排列的顺序用递归怎么实现 -
郑殃复方: 1全排列题目从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列[1].某全排序问

同心县13253457533: C++语言中如何将三个数由大到小排列 -
郑殃复方: #include <iostream> using namespace std; int main() {int a,b,c,t;cin>>a>>b>>c;if(a<b) {t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}if(b<c){t=b;b=c;c=t;}cout << a << ' '<< b <<' '<< c<<endl;return 0; }

同心县13253457533: 排列与组合的公式 -
郑殃复方: 1.排列及计算公式从n个不同元素中,任取m(m≤n)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 ...

同心县13253457533: 我忘记高中时学过的排列与组合了, -
郑殃复方:[答案] 1.排列及计算公式 从n个不同元素中,任取m(m≤n)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 p(n,m...

同心县13253457533: 重复组合问题从n个不同元素中每次取出一个,放回后再取下一个,如此连续取r次所得的结果? -
郑殃复方:[答案] ∵从n个不同元素中每次取出一个 ∴结果是n-1 ∵放回后再取下一个 ∴第二次的结果是n-1 . ∴如此连续取第r次所得的结果仍是n-1 故 如此连续取r次所得的结果是(n-1)^r.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网