如何在Excel中生成N个骰子的可能组合列表


1

我想列出2,3,4,5,6等骰子的可能组合。

例如:

对于2个骰子,单元格A1是11(1& 1)。我想将单元格向下拖动以自动添加以下2-dice值:

12
13
14
15
16
22
23
24
...
55
56
66

(共21种组合)

为了列出N dice的所有值,我们从最小值开始(对于N = 3:1,1,1)。我只想拖动第一个单元格,然后将下一个数字作为骰子的下一个组合出现;即,Excel使用BASE 6而不是10来增加,并排除已经出现在不同序列中的组合。我希望将结果值作为字符串。因此,如果其中一个数字(4个骰子)是1126,则下一个必须是1133,而不是1127。

这对于2,3,4,5,6骰子是否可以实现?


目前尚不清楚你要做什么或数字代表什么(11来自哪里?你要添加的范围的来源是什么?)
fixer1234

对不起,11是2个骰子组合的最小总和。
SKYTTEN

Answers:


1

使用VBA可能会更容易,但可以使用公式来完成。我在LibreOffice Calc中工作,每个公式的最大字符数较低,所以我需要使用辅助列。但如果您愿意,可以将其合并为一个公式。我最多建立了六个骰子,但是如果你按照辅助列中的模式进行操作,你可以将它扩展到你想要的数量。

screenshot

单元格A1是您的起始编号所在的位置。通常,它会是一个 1 为每个骰子。我开始了 123456 说明逻辑。 C到H列是辅助列,每个最多六个骰子。这些单元格为每个单元格找出下一个值。 A列将值连接成一个字符串。输入第2行的公式,然后将该行向下复制以根据需要预先填充(不需要的单元格将为空白,您可以隐藏列C:H,如果需要)。

A2中的公式:

=IF(A1="","",C2&D2&E2&F2&G2&H2)

空白的测试是隐藏不需要的细胞。如果要将所有内容都转换为单个公式,请将C2:H2中的公式替换为引用。

C2:H2中的公式如下:

C2:  =                IF(VALUE(LEFT(A1,1))=6,"", VALUE(LEFT(A1,1)) +          OR(VALUE(MID(A1,2,1))=6))
D2:  =                IF(VALUE(MID(A1,2,1))=6,C2,VALUE(MID(A1,2,1))+IF(LEN(A1)>2,VALUE(MID(A1,3,1))=6,1))
E2:  =IF(LEN(A1)<3,"",IF(VALUE(MID(A1,3,1))=6,D2,VALUE(MID(A1,3,1))+IF(LEN(A1)>3,VALUE(MID(A1,4,1))=6,1)))
F2:  =IF(LEN(A1)<4,"",IF(VALUE(MID(A1,4,1))=6,E2,VALUE(MID(A1,4,1))+IF(LEN(A1)>4,VALUE(MID(A1,5,1))=6,1)))
G2:  =IF(LEN(A1)<5,"",IF(VALUE(MID(A1,5,1))=6,F2,VALUE(MID(A1,5,1))+IF(LEN(A1)>5,VALUE(MID(A1,6,1))=6,1)))
H2:  =IF(LEN(A1)<6,"",IF(VALUE(MID(A1,6,1))=6,G2,VALUE(MID(A1,6,1))+1))

我添加了空格来对齐公式模式,以便更容易看到逻辑;你可以删除这些。你至少有两个骰子,所以前两个公式不需要测试它们是否存在。当第一个骰子到达时 6,其他所有人都只能 6,所以这是最后一排。 C2中的OR函数是因为LO Calc在评估布尔表达式时犹豫不决; OR强制它(并且不会伤害任何东西)。最后一个潜在的模具不需要从下一个模具中携带一个值,所以它的公式稍微短一些。

请注意,列D到H包含对前一列的引用。如果要将其合并为单个公式,请将D2中的C2引用替换为C2公式。然后对每个连续的列执行相同的操作(公式将随着您的操作而增长)。

这是两个骰子的输出:

screenshot 2


这真的超出了我的信念。原来是我的任务的完美解决方案。
SKYTTEN

我已将相同的任务扩展到7个骰子(部分理解6个骰子公式背后的逻辑。)我用于骰子6:H2:= IF(LEN(A1)&lt; 6,“”,IF( VALUE(MID(A1,6,1))= 6,G2,VALUE(MID(A1,6,1))+ IF(LEN(A1)→6,VALUE(MID(A1,6,1))= 6,1)))。对于骰子7:I2:= IF(LEN(A1)&lt; 7,“”,IF(VALUE(MID(A1,7,1))= 6,H2,VALUE(MID(A1,7,1)) +1))但它不起作用。该表再次重复相同的sycle:111,1111至111,1116和111,1111。您能否提一些建议?
SKYTTEN

@SKYTTEN:看看你的公式,我没有看到任何明显的问题,所以我需要深入研究它。我只是注意到你有一个逗号,我假设你的起始号码。你能证实你是从1111111开始的吗?
fixer1234

@SKYTTEN:你的配方发现了两个问题。在我纠正它们之后它起作用了。两者都是H2。 1)当我从评论中复制你的公式时,在U和E之间的最后一个VALUE中有一些奇怪的隐藏字符。我替换了字符并且该错误消失了。 2)在最后一个MID函数中,它应该是7而不是6,因此它应该读取MID(A1,7,1)。
fixer1234

再次感谢。它工作正常。现在我更了解“6”表示没有骰子而不是每个骰子上没有边。不知道什么是“奇怪的”字符,我使用的是IPad的数字但是当我将公式复制到Excel表格时,它完美地工作了。感谢您的时间和宝贵的教训。
SKYTTEN

1

A1 输入:

=ROW()

并复制下来。在 B1 输入:

=ROW()*6

并复制下来。在 C1 输入:

=B1-A1+1

并复制下来。

C 表示可能的值 ñ 骰子。

值得注意的是,可能的结果数量是:

(5 *骰子数)+ 1


我想,我真的很难解释我想要的东西。为了获得N个骰子的所有值,我们从最小值开始(对于N = 3:1,1,1)。我只想拖动第一个单元格和下一个数字作为骰子的下一个组合,即Excel“猜测”BASE为6而不是10并将骰子值作为字符串登记。因此,如果其中一个数字(4个骰子)是1126,则下一个必须是1133,而不是1127
SKYTTEN

@SKYTTEN您的解释是O.K.对于三个骰子,最低结果为3 (三只蛇眼) 最高的结果是18 (3 x 6) 所以结果总数是16
Gary's Student

@SKYTTEN:您是说要列出所有实际组合,而不仅仅是可能组合的数量?
fixer1234

@ fixer1234:这是完全正确的。
SKYTTEN

@SKYTTEN抱歉....................我误解了
Gary's Student

0

你可以用公式做到这一点,但是对于超过2个骰子,它将变得非常难以遵循。

这是一个通用示例,它适用于骰子或任何其他示例。 假设我们有3个表(表1 = A1:A7),(表2 = B1:B7)和(表3 = C1:C7)。第一行是标题(比如dice1,dice2和dice3)。

您必须将公式复制到您获得空结果(达到最大组合数)。

(您可能需要在公式中将“;”替换为“,”作为参数分隔符)

2个骰子(36种组合):

=IF(ROW()-ROW($F$2)+1>COUNTA(Table1)*COUNTA(Table2);"";INDEX(Table1;QUOTIENT(ROW()-ROW($F$2);COUNTA(Table2))+1)&INDEX(Table2;MOD(ROW()-ROW($F$2);COUNTA(Table2))+1))

3个骰子(216种组合):

=IF(ROW()-ROW($F$2)+1>COUNTA(Table1)*COUNTA(Table2)*COUNTA(Table3);"";INDEX(Table1;QUOTIENT(ROW()-ROW($G$2);COUNT(Table2)*COUNT(Table3))+1))&INDEX(Table2;MOD(QUOTIENT(ROW()-ROW($G$2);COUNT(Table3))+1;COUNT(Table3))+1)&INDEX(Table3;MOD(ROW()-ROW($G$2);COUNT(Table3))+1)

它是如何工作的:

  1. 当前的组合编号将由。给出 ROW()-ROW($F$2) + 1 其中F2是放置第一个公式的单元格。

  2. 我们将每6行旋转第一个骰子值( COUNTA(Table2) )与骰子和每36行( COUNTA(Table1)*COUNTA(Table2) )有3个骰子。

  3. 我们将每行用2个骰子旋转第二个骰子值,每6行用3个骰子旋转。

  4. 使用3个骰子,我们将每行旋转骰子值。

另一种方法是Microsoft Query(数据/来自其他来源)。 你需要创建尽可能多的工作表或表(虽然我得到的表“这个数据源包含没有可见的表”,我无法弄清楚为什么,所以表是这样的)包含在A列中的值为1到6,标题如“Dice1”,“Dice2”和“Dice3”。 要获得3组的笛卡尔积,查询将是:

SELECT `Sheet1$`.Dice1 & `Sheet2$`.Dice2 & `Sheet3$`.Dice3 as  Combinations
FROM `Book1.xlsx`.`Sheet1$` `Sheet1$`, `Book1.xlsx`.`Sheet2$` `Sheet2$`, `Book1.xlsx`.`Sheet3$` `Sheet3$`

它将更难准备,但更容易理解(如果你知道基本的SQL)和扩展。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.