從n個人中選擇k個人的選法
題目
從n個人中選選k個人組成一個委員會的不同組合數。
解答
分析
從n-1個人到n個人,增加一個人,這個人可能被選中,也可能不被選中。若第n個人被選中則是從n-1個人中選擇k-1個人,若第n個人沒被選中,則是從n-1個人中選擇k個人。即得以下公式:
由n個人裡選k個人的組合數= 由n-1個人裡選k個人的組合數+由n-1個人裡選k-1個人的組合數;
遞迴法得出推導公式:
F(n,0) = 1;
F(n,k=n)=1;
F(n,k) = F(n-1,k)+F(n-1,k-1)
程式碼
C++語言程式碼實現
int getKfromN(int n ,int k){
if (n<k){
return 0;
}else if(n==k || k==0){
return 1;
}else{
return getKfromN(n-1,k-1)+getKfromN(n-1,k);
}
}
相關推薦
從n個人中選擇k個人的選法
題目 從n個人中選選k個人組成一個委員會的不同組合數。 解答 分析 從n-1個人到n個人,增加一個人,這個人可能被選中,也可能不被選中。若第n個人被選中則是從n-1個人中選擇k-1個人,若第n個人沒被選中,則是從n-1個人中選擇k個人。即得以下公
合唱團 N個學生中選K個,相鄰兩個的位置編號不超過D,使得K個學生乘積最大
網易2016內推筆試題: 有 n 個學生站成一排,每個學生有一個能力值,從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,返回最大的乘積。 每個輸入包含 1 個測試用例。每個測試資料的第一行包含一個整
網易2019校招程式設計筆試題,一條街上n個房子,k個住戶
尚有不足,請高手勿噴,有高見請不吝賜教 import java.util.Scanner; public class T3 { /*一條街上n個房子,k個住戶 * 你需要找一個房子兩邊都有鄰居 * 要求得到所有可能性中, * 最小符合的房子數和最大符合的房
Java-Random 從五個人中隨機三個 且不能重複
package demo; import java.util.Random; /** * 隨機不重複的三個人 * * @author Weirdo-world * */ public class Demo8 { public static void m
大資料處理堆實現N個數據找K個最大資料和堆排序
在N個數據中找K個最大資料思想:用堆實現找最大的資料,則先建立一個N個數據中其前K個節點的最小堆,將沒進入最小堆的節點依次與小堆的頭節點比較,若大於頭節點,則替換兩個值,並且呼叫向下調整演算法(其思想前面部落格已經介紹實現),直到N個數據比較完成,此時最小堆中的K個節點即為
程式設計珠璣之生成0至n-1之間的k個不同隨機序列的擴充套件問題 --2014人人網筆試題目
一般的思想是產生一個隨機數 arr[i] 後,和前面已經產生的arr[0]~arr[i-1]進行比較,如果有重複的就重新產生一個,該演算法的平均時間複雜度為:O(n^2) ,而最壞複雜度為無限!! 這裡我們按照程式設計珠璣上那個問題的擴充套件想法,利用空間換時間的演算法,生成隨機排列的數,此時時間複雜度
用遞歸法計算從n個人中選選k個人組成一個委員會的不同組合數
namespace 大量 ostream 求解 ace return ret 遞歸法 div 用遞歸法計算從n個人中選選k個人組成一個委員會的不同組合數。 分析 由n個人裏選k個人的組合數= 由n-1個人裏選k個人的組合數+由n-1個人裏選k-1個人的組合數; 當n =
從n個數中選擇m個數來 Java實現(順序不固定)
public static List<int[]> collect = new ArrayList<int[]>(); public static void permutation(int[] a, int begin0, int begin,
【HDU6195 2017 ACM ICPC Asia Regional Shenyang Online B】【水題 匹配】cable cable cable M個格子任選K個放K個物品的最小連邊匹配
cable cable cable Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 152 Accep
【DP && 兩個字串求 k 個順序子串相同最大長度】CodeForces
Step1 Problem 給你兩個長度分別為n, m的字串,在第一個字串找 k 個順序的子串,在第二個字串中均出現其順序一樣,求最大這些子串長度和 Step2 Ideas: dp[i][j][k][1]:第一個串第 i 位, 第二個串第 j 位,當中 k
C++排列組合(從N個數中選擇M個數的所有情況)
待選擇的數存放在in矩陣中,矩陣的大小為N,從中選出target=M個數,給出所有可能情況。 思路: in矩陣存放的數為(M=2,N=4): 下標 0 1 2 3 元素 1 2 3 4 定義一個
在程式中定義一函式digit(n,k),它能分離出整數n從右邊數第k個數字,如digit(31859,3)=8,gigit(2076,5)=0.
#include<bits/stdc++.h>//遞迴 using namespace std; void fl(int n,int k) {k-=1; if(k==0)cout<<n%10; else fl(n/10,k); } int main(
19. 中興面試題:輸入兩個整數n和m, 從數列1,2,...,n中任意選擇幾個數,使其和等於m, 要求編寫程式輸出所有的組合
2010年中興面試題程式設計求解:輸入兩個整數 n 和 m,從數列1,2,3.......n中隨意取幾個數, 使其和等於 m ,要求將其中所有的可能組合列出來. 分析: 可以使用遞迴思想, 從第n個數開始找其組合, 1)包括n的所有組合 2)不包括n的所有組合 把所有組
從n個物件中隨機選擇一個
現在有n個物件,讓從裡隨機選擇一個是非常簡單的。最直接的方法是產生一個1~n的隨機數就可以了。但是現在如果我告訴你,n是不確定的,又該怎麼做? 現在問題變為: 如何從事先不知道文字檔案行數的情況下讀取該檔案,從中隨機選擇一行並輸出? 這個題目看上去比原來的問題有意思的多。答
迴圈連結串列報數問題,n個人編號分別為1,2,3,……n,從第k個編號開始數1,2到m個然後刪除第m個人,然後下 一個人再從1開始數數到第m個,然後再刪除m人
#include<iostream> #include<stdio.h> using namespace std; //迴圈連結串列報數問題,n個人編號分別為1,2,3,……n,從第k個編號開始數1,2到m個然後刪除第m個人,然後下 //一個人再從1
【轉載】隨機生成k個範圍為1-n的隨機數,其中有多少個不同的隨機數?
n) 不重復 nlog 並且 線性 一個 劃分 次數 com 來源:http://www.cnblogs.com/haolujun/archive/2012/11/11/2765102.html 假如現在讓你隨機生成k個範圍在1-n內的隨機數,那麽你能得到多少個不同
從n個字符中,找出m個排列組合
scan maxlength else include sizeof 排列組合 length char col 網上看到的版本 #include <string.h> #include <stdio.h> #include <stdlib.h
在N個元素的數組中獲取K個元素的所有組合問題
.cn int 腳本 count erl sin cal 獲取 結果 可以寫循環,也可以用模塊。 百度許久找到一個博客 http://blog.sina.com.cn/s/blog_4a0824490101f1kc.html 詳細介紹了Algorithm::Combina
校招試題 n個數裏最小的k個 stringstream運用
sum fail mes DC AC 升序 \n 超過 include 找出n個數裏最小的k個 輸入描述: 每個測試輸入包含空格分割的n+1個整數,最後一個整數為k值,n 不超過100。 輸出描述: 輸出n個整數裏最小的k個數。升序輸出 輸入例子1:
n個有序數組,取出k個最大值
ole turn uniq sort .so 取出 ons 排序 class 思路:先合並數組,在去重,然後排序,再取出k個最大的值; var arr = [ [10, 2, 3, 4, 5], [2, 3, 4, 5, 6], [5, 7, 8,