⑴ 求全排列組合演算法的VB源代碼
'1、全排列
P(n)=N!
自定義函數PL:
Function
PL(byval
N
as
integer)
PL=1:i=1
do
while
i<=N
PL=PL*i
loop
End
Fuction
'2、組合
ZH(N,K)=N!/(N-K)!/K!
的自定義函數,從N個種取K個的組合數:
Function
ZH(Byval
N
as
integer,K
as
INteger)
'
調用了上面的排列函數
PL
ZH=PL(N)/PL(N-K)/PL(K)
End
Function
⑵ 求助C 語言 已知30個數,其中取20個數進行求和 的問題! 請直接把源代碼寫上!
這個讀取文件就不寫了,給一個測試數組的代碼,你按照你的具體要求改一下就行了,哪裡不懂給我信息
#include<stdio.h>
#include<string.h>
#define N_L 30 //數組長度
#define MAX 120 // 某定值
#define F_L 10 //本例中取20個數,則N_L-20 = F_L
int numi[N_L]={ 11,2,3,4,5,6,7,8,9,9, //測試數組,假設數組元素為正整數,其他情況則做相應改動
1,2,3,4,5,6,7,8,9,9,
1,22,23,24,25,26,27,28,29,20};
int find(int *p) //測試當前取值是否匹配,成功則輸出
{ int i=0,sum=0;
for(i=0;i<N_L;i++)
sum+=numi[i];
if(sum>=MAX) return 0;
for(i=0;i<N_L;i++)
printf("%2d",numi[i]);
printf("=%d<%d\n\n",sum,MAX);
return 1;
}
int test(int *num_t,int deptemp,int site,char first)
/*遞歸查找,num_t為數組首地址,deptemp記錄遞歸次數,site為數組當前位置,first標記是否第一層遞歸*/
{ int nback=0;
while(site<N_L)
{ if('s'==first && site>N_L-F_L) return 0; /* 第一層遞歸的特殊判斷 */
if(num_t[site]==0) { site++; continue; } /* 當前位置的值已經去掉,則去掉下一個值 */
nback=num_t[site]; num_t[site]=0; /* 將當前值設為零並保存以便恢復,為零表示去掉當前位置的值 */
if(deptemp<F_L-1) test(num_t,deptemp+1,site+1,'n'); /* 去掉的個數還不到10個,唯廳帶繼續*/
else find(num_t); /*遞歸到第十層,即去掉10個數,測試是否匹配 */
num_t[site]=nback; site++; /*恢復當前位置的值,以便測試其他的情況指蘆伏大*/
}
return 1;
}
void main()
{ test(numi,0,0,'s') ;
}
⑶ 演算法由某些基本成分組成,這些基本成分是一些基本的操作和控制結構,給出一種最基本的控制結構
??怎麼沒有給出來啊?通常的計算機程序總是由若干條語句組成,從執行方式上看,從第一條語句到最後一條語句完全按順序執行,是簡單的順序結構;若在程序執行過程當中,根據用戶的輸入或中間結果去執行若干不同的任務則為選擇結構;如果在程序的某處,需要根據某項條件重復地執行某項任務若干次或直到滿足或不滿足某條件為止,這就構成循環結構。大多數情況下,程序都不會是簡單的順序結構,而是順序、選擇、循環三種結構的復雜組合。三種基本結構的流程圖、N-S圖以及PAD圖可以參看本書第1章1.4節「演算法」相關內容。如:在C語言中,有一組相關的控制語句,用以實現選擇結構與循環結構:選擇控制語句:if;switch、case循環控制語句:for、while、dowhile轉移控制語句:break、continue、goto