c程式設計從n個數中仰m個數進行組合

時間 2021-07-21 03:39:38

1樓:馮老師(必果學院

程式設計思路:

從n個數中選出m個數進行組合(n>m)可以採用遞迴的方式解決

先從n個數中選一個數出來,然後在剩下的n-1個數當中選取m-1個數進行組合

對於n-1個數,同樣有

先從n-1個數中選一個數出來,然後在剩下的n-2個數當中選取m-2個數進行組合

對於n-n個數,同樣有

先從n-n個數中選一個數出來,然後在剩下的n-n個數當中選取m-n個數進行組合

如此遞迴

直到m-n==1為止

當m-n為1的時候,自然不用選了

每次選取的結果放入一個陣列當中,作為引數傳遞下去

當遞迴到m-n為1的時候,陣列和當前選定的值即構成一個有效組合,便可輸出

這類問題都可以嘗試遞迴的解決思路,將一個複雜的大問題,一級一級轉化為較小的,可以解決的問題

示例**如下:

void select(

int* data/*待篩選的數 裡面不能有重複的數*/,

int n,

int m,

int list/*假設list長度足夠,為m,初始list中的元素值為-1*/,

int listlen)

{int i,j;

if(m==1){

for(i=0;i

2樓:匿名使用者

n = 5

m = 3

a陣列 result向量

{}//輸出,回溯

//輸出,回溯

//輸出,回溯

//輸出,回溯

//輸出,回溯

。。。。。。 //這是排列,不是組合自己單步執行除錯吧,這樣更容易理解

c++中在陣列中提取n個數的全組合,該怎麼實現?

3樓:bc警長

這樣你看行bai

不行。。。定義數du組int ans[i],給裡面先依次放入zhi數直到滿,這是一dao種,不斷把最後一

回個數去掉再換下

答一個進來,直到全換一遍,再把倒數第二個數換了,再換最後一個數,倒數第二個數全換一遍後再倒數第三個,這很顯然是兩層迴圈,外層-正在處理的數位,裡層-換數,當第一位全換完後程式結束

或者。。。用遞迴吧,參考我上面寫的方法,例如換了一個倒數第三位後,迴圈呼叫『換數』函式直到倒數第二位所有能換的都換了。令引數為2,它一換,又迴圈呼叫自己,把1傳過去……

恩...函式差不多是這樣吧。。。

int huan(int wei)

返回ans[wei]現在的值}

4樓:匿名使用者

如同樓上所說的——一種遞迴演算法、一種回溯演算法。

c 中從n到m能被k整除的個數怎麼寫

這是最前面的。int main int n,m,s,k int i 0 for n然後輸出i就可以。從鍵盤輸入三個正整數m n 和k 1 k m n 輸出m和n之間能被k整除的數並統計個數。要求 首先是鍵盤就是0 9,所以可以分以下幾種可能 當k m n時有9種,當k m c 求一個高效的組合演算法...

求N個數的最大值C語言,C 求N個數中的最大值

include stdio.h int findmax int x,int m main int n printf input the n n scanf d n printf d n findmax x,n 功能說明 返回陣列中前n個數中的最大值,findmax使用了遞迴呼叫方式 匡龍戈 void...

用C語言程式設計求 n以內素數的個數(n10 8)

寫了一個,連寫檔案也只用13秒.ncount 5761455 time 13s include include void main 先假設所有的數都是素數 for i 0 i pbyte 0 false 0不是素數pbyte 1 false 1不是素數pbyte 2 true 2是素數 篩選,所有偶...