如何利用EXCEL解决排列组合平均分配问题问题

今天看啥 热点:
有四列,假设分别为A,B,C,D。A列有3个数据,简单假设为1,2,3.B列有27个数据,简单假设为1-27C列有22个数据,简单假设为1-22D列有23个数据,简单假设为1-23。现在希望得到一个排列组合的结果。如1,1,1,1
.......请问能写一个宏来处理这个难题?我的数据不是简单的有规律的数字。请不要用数据之间的关系来写宏。谢谢!
用多个 FOR 和 NEXT来实现,比如下面这个Sub zuhe()Dim a, b, c, d, eFor a = 1 To 9For b = 1 To 7For c = 1 To 6For d = 1 To 9e = a & be = e & ce = e & dRange(&a& & 65536).End(xlUp).Offset(1, 0).Value = eNextNextNextNextEnd Sub将所有1-9,1-7,1-6,1-9的组合,共计3402个不同组合全部罗列出来 以下是你需要的宏,要设置a,b,c,d列里面为你要组合出来的数字,最大组合能力262140个 :Sub zuhe()Dim A, B, C, DDim H, I, J, K, L, MA = Application.WorksheetFunction.Max(Range(&a:a&))B = Application.WorksheetFunction.Max(Range(&b:b&))C = Application.WorksheetFunction.Max(Range(&c:c&))D = Application.WorksheetFunction.Max(Range(&d:d&))For H = 1 To AFor I = 1 To BFor J = 1 To CFor K = 1 To DM = M + 1L = Range(&a& & H).Value & Range(&b& & I).Value & Range(&c& & J).Value & Range(&d& & K).ValueRange(&e1&).Value = &组合如下:&If M &= 65535 Then
Range(&e65536&).End(xlUp).Offset(1, 0).Value = L
If M &= 131070 Then
Range(&f65536&).End(xlUp).Offset(1, 0).Value = L
If M &= 196605 Then
Range(&g65536&).End(xlUp).Offset(1, 0).Value = L
Range(&h65536&).End(xlUp).Offset(1, 0).Value = L
End IfNextNextNextNextEnd Sub提问者评价lincoln好耐心帮我解决问题,太谢谢了~
2)的情况指的是甲不在头不在尾,那么就有C(3,1)个位置;排了甲再排乙,由于乙不能排第五并且甲占了2,3,4中的一个位置,所以乙也有C(3,1)个选择;剩下3个人在剩下的3个位置上任意排列所以是P(3,3)。所以总共可出现的情况就是C(3,1)*C(3,1)*P(3,3)=54 。排列组合问题思路主要就是根据题意,把特殊情况单独列出来讨论,对于各种情况采用相加原则,对于情况内每个元素的安排采用相乘原则。看不明白2)是怎么回事情,对于此类问题,本人一般用总的排列方法减去特殊情况的方法。此题为总P(5,5),甲在头的情况P(4,4),乙在尾的情况P(4,4),甲在头同时乙在尾的情况P(3,3),所以此题P(5,5)-P(4,4)-P(4,4)+P(3,3)=78这里加上P(3,3)是因为在减甲在头和乙在尾的时候减了两次甲乙同时在头尾的情况第一个C(3,1)表示甲在第二,三,四位中的一位,是给甲选位置,,(假如是第二位);第二个C(3,1)表示已在第一,三,四位中的一位,是给已选位置,,;最后P(3,3)是给剩下的三个人选位置,,,,技巧就是公平的对待问题中的每一个使用,,,要用排列就都用排列,,,要用组合都用组合,,
我做出来一个使用VBA做出来的组合表可以实现这个功能,需要的话,加Q号,我发给你。或者发个邮箱给我。 生成的所有组合列明如下:///////////////////////////提问者评价谢谢拉
对于某几个元素顺序一定的排列问题,可先把这几个元素与其它元素一同进行排列,然后用总排列数除以这几个元素的全排列数,这其实就是局部有序问题,利用除法来“消序”。 例25 由数字0、1、2、3、4、5组成没有重复数字的六位数,其中个位数小于十位数字的共有( ) A.210个 B.300个 C. 464个 D.600个 简析:若不考虑附加条件,组成的六位数共有 个,而其中个位数字与十位数字的 种排法中只有一种符合条件,故符合条件的六位数共 =300个,故选B。 例26 信号兵把红旗与白旗从上到下挂在旗杆上表示信号,现有3面红旗、2面白旗,把这5面旗都挂上去,可表示不同信号的种数是 ________(用数字作答)。 分析:5面旗全排列有 种挂法,由于3面红旗与2面白旗的分别全排列均只能作一次的挂法,故共有不同的信号种数是 =10(种)。 说明:此题也可以用组合来解,只需5个位置中确定3个,即 =10。 例27 有4个男生,3个女生,高矮互不相等,现将他们排成一行,要求从左到右,女生从矮到高排列,有多少种排法? 分析:先在7个位置上任取4个位置排男生,有 种排法,剩余的3个位置排女生,因要求“从矮到高”,只有一种排法,故共有 =840种。 在处理分堆问题时,有时几堆中元素个数相等,这时也要用除法, 例28 不同的钢笔12支,分3堆,一堆6支,另外两堆各3支,有多少种分法? 解:若3堆有序号,则有 · ,但考虑有两堆都是3支,无须区别,故共有 / =9240种。 例29 把12支不同的钢笔分给3人,一人得6支,二人各得3,有几种分法? 解:先分堆:有 / 种。再将这三堆分配给三人,有 种。共有 · / =3 种。 本题亦可用“选位,选项法”,即: =3 。
相关搜索:
相关阅读:
相关频道:
电脑知识最近更新excel排列组合问题
excel排列组合问题
在A1单元格内有四个数如 3489
在B1单元格内有六个数如 012567
我要先在A1单元格内任取一个数,再在B1单元格内任取两个数,比如356,这种组合我要一一列在C1单元格内,请问用函数或者VBA怎么写
【注意,是组合,不是排列;另外如例,原数没有重复】
这种组合在C列一一列出:
Sub 组合()
For I = 1 To 4
A = Mid(X1, I, 1)
For j = 1 To 5
B = Mid(X2, j, 1)
For K = j + 1 To 6
C = Mid(X2, K, 1)
Y = A & B & C
Cells(N, 3) = Y
Debug.Print Y
请遵守网上公德,勿发布广告信息
相关问答:我要文库申报
查看: 20545|回复: 7
如何自动生成所有排列组合?
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次管理次数 次
网站名称: Excel技巧网 | Excel专家栖息谷 | 微软中文技术社区合作伙伴站内采编:
署名作者: willin2000
版权声明: 版权归本站与作者共有 除本站官方外非作者本人转载须经许可并注明出处
适用版本: &
语言环境: 简体中文
学习方法: 掌握Excel技巧的关键是动手操作
下载 ≠ 知识
免费注册成为本站会员,享用更多功能,结识更多Office办公高手!
才可以下载或查看,没有帐号?
Q:如何自动生成所有排列组合?
A:下列代码列出在1-7中取5个数的所有组合:Sub ListComb5of7()
Dim II%, I%, J%, K%, L%, M%
Dim Srt1$, Srt2$, Srt3$, Srt4$, Srt5$
Dim TStr1$, TStr2$, TStr3$, TStr4$
Const FullStr = &1234567&
II = 0
For I = 1 To 7
& & Srt1 = Mid(FullStr, I, 1)
& & TStr1 = Replace(FullStr, Srt1, &&)
& & For J = 1 To 6
& && &&&Srt2 = Mid(TStr1, J, 1)
& && &&&TStr2 = Replace(TStr1, Srt2, &&)
& && &&&For K = 1 To 5
& && && && &Srt3 = Mid(TStr2, K, 1)
& && && && &TStr3 = Replace(TStr2, Srt3, &&)
& && && && &For L = 1 To 4
& && && && && & Srt4 = Mid(TStr3, L, 1)
& && && && && & TStr4 = Replace(TStr3, Srt4, &&)
& && && && && & For M = 1 To 3
& && && && && && &&&Srt5 = Mid(TStr3, M, 1)
& && && && && && &&&II = II + 1
& && && && && && &&&Cells(II, 1) = Srt1 & Srt2 & Srt3 & Srt4 & Srt5
& && && && && & Next
& && && && &Next
& && &&&Next
& & Next
Next
End Sub复制代码
补技能分评比标准调整
我的偶像:)
谢谢分享:)
中级一, 积分 607, 距离下一级还需 143 积分
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次
正在学习VBA,就是代码不易懂呀!
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次管理次数 次
谢谢 Willin2000 兄的分享!
代码优化如下,速度将提高10倍,数量大时更显优势。
Sub ListComb5of7()
Dim II%, I%, J%, K%, L%, M%
Dim Srt1$, Srt2$, Srt3$, Srt4$, Srt5$
Dim TStr1$, TStr2$, TStr3$, TStr4$
Dim t, arr()
Const FullStr = &1234567&
t = Timer
II = 0
For I = 1 To 7
& & Srt1 = Mid(FullStr, I, 1)
& & TStr1 = Replace(FullStr, Srt1, &&)
& & For J = 1 To 6
& && &&&Srt2 = Mid(TStr1, J, 1)
& && &&&TStr2 = Replace(TStr1, Srt2, &&)
& && &&&For K = 1 To 5
& && && && &Srt3 = Mid(TStr2, K, 1)
& && && && &TStr3 = Replace(TStr2, Srt3, &&)
& && && && &For L = 1 To 4
& && && && && & Srt4 = Mid(TStr3, L, 1)
& && && && && & TStr4 = Replace(TStr3, Srt4, &&)
& && && && && & For M = 1 To 3
& && && && && && &&&Srt5 = Mid(TStr3, M, 1)
& && && && && && &&&II = II + 1
& && && && && && &&&ReDim Preserve arr(1 To II)
& && && && && && &&&arr(II) = Srt1 & Srt2 & Srt3 & Srt4 & Srt5
& && && && && & Next
& && && && &Next
& && &&&Next
& & Next
Next
Range(&A1:A& & II) = Application.Transpose(arr)
MsgBox Timer - t
End Sub
复制代码
初级二, 积分 53, 距离下一级还需 197 积分
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次
学习一下!!
新鲜人, 积分 1, 距离下一级还需 9 积分
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次
在1-7中取5个数,这5个数可以重复吗?
新鲜人, 积分 1, 距离下一级还需 9 积分
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次
新鲜人, 积分 2, 距离下一级还需 8 积分
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次
学习下,支持
初级一, 积分 42, 距离下一级还需 8 积分
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次
这个没有解释看不懂。
站长推荐 /1
40集公式入门动画教程,一天带你打好公式的基础。
Excel技巧网的会员探讨问题仅代表其个人意见,与网站的立场无关。任何违反国家和地方相关法律法规的言论,本站有义务协助政府相关部门追究发言者的责任!
本站中非注明转载文章与案例的版权为作者与Excel技巧网共有。若非原文作者,本站之外任何单位或个人未经允许,不得将其用于商业用途。
若非原文作者,任何形式的非商业性转载必须获得Excel技巧网或作者允许,并注明作者和出处。
会员发表的帖子如涉及版权纠纷,须自行负责。详情请参考注册时的网站服务条款。
本站特聘法律顾问:沈学律师
Powered by

我要回帖

更多关于 排列组合不相邻问题 的文章

 

随机推荐