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是素數 篩選,所有偶...