ActiveSheetCalculate
k = 2
For a = 2 To 13
For b = a + 1 To 14
For c = b + 1 To 15
For d = c + 1 To 16
Cells(k, 4) = Cells(a, 2)
Cells(k, 5) = Cells(b, 2)
Cells(k, 6) = Cells(c, 2)
Cells(k, 7) = Cells(d, 2)
k = k + 1
Next
Next
Next
Next
MsgBox ("共有" & k - 1 & "个")
随机数会变动,建议关掉自动重算,程序的开始那条是重算命令。共有1366种情况
k的值我弄错了,应该是1365,因为是从2开始的,应该-2
组合的数量,其实可以用概率论的方法。
就是C 4 15 ,15!/(4!11!)
用excel的公式可以求出
=FACT(15)/FACT(4)/FACT(11)
递归吧。
void Gofor(int l_n, int r_n, string s, int n, vector<string>& result){// n 是括号的总数
// 如果"("的数量和")"一样, 并且")"的数量和总数一样,那么就有一个答案就出现了
if (l_n == r_n && r_n == n)
resultpush_back(s);
// 如果"("的数量比总数小,那么加一个"("
if (l_n < n)
Gofor(l_n+1, r_n, s+"(", n, result);
// 如果")"的数量比"("的数量小, 那么加一个")"
if (r_n < l_n)
Gofor(l_n, r_n+1, s+")", n, result);
}
vector<string> Parenthesis(int n){
// 不要在意变量名
vector<string> result(0);
if (n == 0) return result;
// 从一个"("开始
string start = "(";
// 我们从一个"("开始,那么left_number = 1,right_number = 0
int left_number = 1;
int right_number = 0;
// 开始递归
Gofor(left_number, right_number, start, n, result);
return result;
}
void main(){
int n,r;
scanf(n,r);
int c=con(n,r);
static int a[c+1][r+1];
f(n,r);
int i,j;
for(i=1;i<=c;i++){
for(j=1;j<=r;j++){
printf(a[i][j]);
printf(’/t’);
}
printf(’/n’);
}
}
int con(int x,int y){
int m=1;int p=1;int q=1;
int i,co;
for(i=1;i<=x;i++)
m=i;
for(i=1;i<=y;i++)
p=1;
for(i=1;i<=x-y;i++)
q=i;
co=m/(pq);
return co;
}//求组合数
int f(int s,int z){
int i,j,k;
int x=0;
int y;
j=1;k=0;int t;int p;
for(y=x+1;y<=s-z+1;y++){
p=k+con(s-y,z-y);
for(t=p;t<=p+k;j++)
a[t][j]=y;
if(j<=z){
j++;
f(x+1);
}
}
return a[t][j];
}
版本 2
程序集 窗口程序集1
子程序 __启动窗口_创建完毕
局部变量 A, 整数型
局部变量 B, 整数型
局部变量 C, 整数型
局部变量 D, 整数型
局部变量 数组, 文本型, , "4"
数组 = { “A”, “B”, “C”, “D” }
编辑框1是否允许多行 = 真
编辑框1内容 = “”
计次循环首 (4, A)
计次循环首 (4, B)
如果真 (B = A)
到循环尾 ()
如果真结束
计次循环首 (4, C)
如果真 (C = B 或 C = A)
到循环尾 ()
如果真结束
计次循环首 (4, D)
如果真 (取反 (D = C 或 D = B 或 D = A))
编辑框1内容 = 编辑框1内容 + 数组 [A] + 数组 [B] + 数组 [C] + 数组 [D] + “ ”
如果真结束
计次循环尾 ()
计次循环尾 ()
计次循环尾 ()
计次循环尾 ()
----------------------------------------
运行结果:
ABCD ABDC ACBD ACDB ADBC ADCB BACD BADC BCAD BCDA BDAC BDCA CABD CADB CBAD CBDA CDAB CDBA DABC DACB DBAC DBCA DCAB DCBA
这个只能用软件或者脚本来计算生成,我用过这家的软件,百度输入“号码组合/数字组合排列脚本/字母/标题所有组合生成” 关键字搜索 就可以找到该软件开发的作者网站。 各种数字号码组合生成软件都有,也可以按个人要求定制一些特殊功能,很不错,还可以提供免费试用,你可以问问看看。
#include<stdioh>
#include<stringh>
void
Show(int
n,int
len
,char
str[],
char
p[],int
i)
{
/函数功能说明: 密码穷举法
递归算法
参数说明:
len
密码可选元素的个数,实际等于
strlen(str);
n
密码位数。
STR[]密码表。
p
密码排列组合的临时存档
/
int
a;
n--;
for(a=0;
a
<
len;
a++)
{
p[n]=str[a];
if(n==0)printf("%d:%s
",(i)++,p);
if(n>0)Show(n,len
,
str,p,i);
}
} /驱动程序
用于测试/
int
main(void)
{
char
str[]="abcdef";//密码表
可选元素集合可根据选择修改
int
n=4; //密码位数,根据具体应用而定。
int
len=strlen(str);//用于密码元素集合计数。
char
p[20]; //存放排列组合的密码,用于输出。
int
num=0;//存放统计个数的整数值,
int
i=#//计数器
地址。
p[n]='\0';//这个不用说啦。 Show(
n,len
,str,
p
,i);
printf("\n%d
位密码,每个密码有%d个选择的话,共有:%d个组合。\n",n,len,i); return
0;
}
这个算法挺麻烦的,要遍历几次,可以这样做:
1)按大到小的顺序排序输入数组;
2)按个数循环找,先2个一组、再3个一组。。。。;其间注意判断:和小于20就break;等于20就print,大于20就继续;
循环挺复杂的,一下说不清,不说了。。
void
f()
{
int
i1,i2,i3,i4,i5,i6,i7,i8;
for
(i1=1;i1<32;i1++)
for
(i2=1;i2<32;i2++){if
(i1==i2)
continue;
for
(i3=1;i3<32;i3++){if
(i1==i3)
continue;
if
(i2==i3)
continue;
for
(i4=1;i4<32;i4++){if
(i1==i4)
continue;
if
(i2==i4)
continue;
if
(i3==i4)
continue;
for
(i5=1;i5<32;i5++){if
(i1==i5)
continue;
if
(i2==i5)
continue;
if
(i3==i5)
continue;
if
(i4==i5)
continue;
for
(i6=1;i6<32;i6++){if
(i1==i6)
continue;
if
(i2==i6)
continue;
if
(i3==i6)
continue;
if
(i4==i6)
continue;
if
(i5==i6)
continue;
for
(i7=1;i7<32;i7++){if
(i1==i7)
continue;
if
(i2==i7)
continue;
if
(i3==i7)
continue;
if
(i4==i7)
continue;
if
(i5==i7)
continue;
if
(i6==i7)
continue;
for
(i8=1;i8<32;i8++){if
(i1==i8)
continue;
if
(i2==i8)
continue;
if
(i3==i8)
continue;
if
(i4==i8)
continue;
if
(i5==i8)
continue;
if
(i6==i8)
continue;
if
(i7==i8)
continue;
printf("%d,%d,%d,%d,%d,%d,%d,%d\
",i1,i2,i3,i4,i5,i6,i7,i8);
}}}}}}}
}
不过估计没有什么用,因为输出的组合数多达
31302928272625/(12345678)个
没有实际意义。
以上就是关于VBA:求等于某值的所有组合全部的内容,包括:VBA:求等于某值的所有组合、如何在c++环境下编写一个能输出n对圆括号所有组合的程序、跪求用递归思想编一函数求组合数的程序。(用C哦。)比如在1,2,3,4,5中输出3个数的所有排列!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)