⑴ 求全排列组合算法的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