基于排列與組合輸出多少中情況詳解
排列
#include <stdio.h>
// 主要是找到當(dāng)前要排的 和后面要排數(shù)的關(guān)系
int swap(int m,int n)
{
if(n==1)
return m-n+1;
return m*swap(m-1,n-1);
}
int main()
{
int m=5,n=4;
printf("%d",swap(5,4));
}
組合
計(jì)算3個(gè)A,2個(gè)B可以組成多少種排列的問(wèn)題
思路一:
#include <stdio.h>
/*
3個(gè)A,2個(gè)B 根據(jù)排列 第一個(gè)位置
可以是A也可以是B 如A_ _ _ _ 或著 B_ _ _ _ 由于第一個(gè)位置
確定了 一個(gè)字母 所以 如果確定的是A 則在剩下的四個(gè)位置中
就只能有 2個(gè)A ,2個(gè)B了 所以總的情況就是 A_ _ _ _ +B_ _ _ _ 兩個(gè)排列總數(shù)之和
*/
int f(int m, int n)
{
if(m==0 || n==0) return 1;
return f(m,n-1)+f(m-1,n);
}
void main ()
{
printf("%d ",f(3,2));
}
思路二:
#include <stdio.h>
#include <math.h>
/*
對(duì)于(m+n)!種排列方法是針對(duì)所有元素都不重復(fù)的情況下計(jì)算出的,
如果存在重復(fù),則需要篩選出這些重復(fù)的排列情況。
于是我們可以采用捆綁法,將相同的元素綁在一起,由于是組合,所以?xún)?nèi)部元素的排列問(wèn)題不予考慮,
這些排列數(shù)總共有m!和n!,因此去掉這些重復(fù)情況后就得到(m+n)!/(m!*n!)中排法。
m個(gè)A n個(gè)B的排列一共有(m+n)!/(m!*n!)
而m-1個(gè)A n-1個(gè)B的排列一共有(m+n-2)!/((m-1)!*(n-1)!)
所以m個(gè)A n個(gè)B的排列數(shù)=m-1個(gè)A n-1個(gè)B的排列數(shù)*(m+n)*(m+n-1)/(m*n)
關(guān)鍵是找到(m個(gè)A和n個(gè)B的排列)和(m-1個(gè)A和n-1個(gè)B)之間關(guān)系
*/
int f(int m, int n)
{
if(m==0 || n==0) return 1;
return f(m-1,n-1)*(m+n-1)*(m+n)/m/n;
}
void main ()
{
printf("%d ",f(3,2));
}
相關(guān)文章
解析c語(yǔ)言switch中break語(yǔ)句的具體作用
以下是對(duì)c語(yǔ)言switch中break語(yǔ)句的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-07-07c語(yǔ)言中g(shù)etch,getche,getchar的區(qū)別
getche() 和getch()很相似,它也需要引入頭文件conio.h,那它們之間的區(qū)別又在哪里呢?不同之處就在于getch()無(wú)返回顯示,getche()有返回顯示2013-09-09C++實(shí)現(xiàn)LeetCode(117.每個(gè)節(jié)點(diǎn)的右向指針之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(117.每個(gè)節(jié)點(diǎn)的右向指針之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07數(shù)據(jù)結(jié)構(gòu) 紅黑樹(shù)的詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 紅黑樹(shù)的詳解的相關(guān)資料,數(shù)據(jù)結(jié)構(gòu)中的二叉樹(shù)查找,紅黑樹(shù)的講解,需要的朋友可以參考下2017-07-07C++第三方日志庫(kù)log4cplus的安裝與使用配置教程
log4cplus是C++編寫(xiě)的開(kāi)源的日志系統(tǒng),log4cplus具有線程安全、靈活、以及多粒度控制的特點(diǎn),本文給大家介紹C++第三方日志庫(kù)log4cplus的安裝與使用教程,感興趣的朋友一起看看吧2022-02-02Qt創(chuàng)建項(xiàng)目實(shí)戰(zhàn)之手把手創(chuàng)建第一個(gè)Qt項(xiàng)目
我們?cè)谶M(jìn)行軟件開(kāi)發(fā)學(xué)習(xí)時(shí),有時(shí)候需要qt軟件進(jìn)行代碼的敲寫(xiě),下面這篇文章主要給大家介紹了關(guān)于Qt創(chuàng)建項(xiàng)目實(shí)戰(zhàn)之手把手創(chuàng)建第一個(gè)Qt項(xiàng)目的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04