我想在Excel中创建一些具有以下特征的随机列:
我尝试在A列中创建9个随机数,然后使用- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
/* - - - - */
/* - - - - */
[cell.yourButton setTag:indexPath.row];
/* - - - - */
/* - - - - */
}
作为列,但由于 ROUND (我认为)它并不完全正确,因为并非所有列都具有sum = 10(有些人还有8人等10人)
例如:
依此类推,数字按任何顺序排列,如
答案 0 :(得分:2)
只有5个可能的组合9个数字0,1& 2(无视顺序)总数= 10.
将这些组合放在电子表格中:
╔════╦══════════════════════╤═════════╤═════════╤═════════╤═════════╕ ║ ║ A │ B │ C │ D │ E │ ╠════╬══════════════════════╪═════════╪═════════╪═════════╪═════════╡ ║ 1 ║ CORRECT COMBINATIONS │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 2 ║ Group 1 │ Group 2 │ Group 3 │ Group 4 │ Group 5 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 3 ║ 2 │ 2 │ 2 │ 2 │ 2 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 4 ║ 2 │ 2 │ 2 │ 2 │ 1 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 5 ║ 2 │ 2 │ 2 │ 1 │ 1 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 6 ║ 2 │ 2 │ 1 │ 1 │ 1 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 7 ║ 2 │ 1 │ 1 │ 1 │ 1 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 8 ║ 0 │ 1 │ 1 │ 1 │ 1 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 9 ║ 0 │ 0 │ 1 │ 1 │ 1 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 10 ║ 0 │ 0 │ 0 │ 1 │ 1 │ ╟────╫──────────────────────┼─────────┼─────────┼─────────┼─────────┤ ║ 11 ║ 0 │ 0 │ 0 │ 0 │ 1 │ ╙────╨──────────────────────┴─────────┴─────────┴─────────┴─────────┘
RAND()
在列中生成9个随机数(比如单元格G3:G11)RANK(G3,$G$3:$G$11)
获取相邻列中随机排序的数字1-9列表。RANDBETWEEN(1,5)
随机选择5个允许的数字组合中的一个(比如在单元格I2中)使用INDEX从允许值的9x5区域内引用随机选择列(1-5)中的单元格和随机排序的行(1-9)。例如:在单元格I3中:=INDEX($A$3:$E$11,H3,$I$2)
您也可以将RANK()组合到索引函数中。
╔════╦═══════════════════════╤══════╤════════╤═══╤═══════════════════════╤════════╕ ║ ║ G │ H │ I │ J │ K │ L │ ╠════╬═══════════════════════╪══════╪════════╪═══╪═══════════════════════╪════════╡ ║ 1 ║ │ │ group: │ │ │ group: │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 2 ║ RANDOM number (order) │ rank │ 3 │ │ RANDOM number (order) │ 4 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 3 ║ 0.04 │ 8 │ 0 │ │ 0.92 │ 2 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 4 ║ 0.13 │ 7 │ 1 │ │ 0.79 │ 1 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 5 ║ 0.9 │ 1 │ 2 │ │ 0.2 │ 0 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 6 ║ 0.36 │ 6 │ 1 │ │ 0.31 │ 1 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 7 ║ 0.49 │ 5 │ 1 │ │ 0.98 │ 2 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 8 ║ 0.89 │ 2 │ 2 │ │ 0.65 │ 1 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 9 ║ 0 │ 9 │ 0 │ │ 0.68 │ 1 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 10 ║ 0.84 │ 3 │ 2 │ │ 0.57 │ 1 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 11 ║ 0.65 │ 4 │ 1 │ │ 0.28 │ 1 │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 12 ║ │ │ │ │ │ │ ╟────╫───────────────────────┼──────┼────────┼───┼───────────────────────┼────────┤ ║ 13 ║ │ │ 10 │ │ │ 10 │ ╙────╨───────────────────────┴──────┴────────┴───┴───────────────────────┴────────┘
答案 1 :(得分:1)
我能得到的最接近的是:
=IF(SUM(A$1:A1)>=10,0,IF(SUM(A$1:A1)=9,1,IF(SUM(A$1:A1)=8,2,RANDBETWEEN(1,2))))
将其放入A2中并向下复制。它必须在第2行,否则将导致循环引用。
它用1或2填充列,直到它总和为10,然后其余为零。
修改强>
这几乎是随机的,这将允许0
随机:
=IF(SUM(A$1:A1)>=10,0,IF(SUM(A$1:A1)=9,1,IF(SUM(A$1:A1)=8,2,IF(AND(SUM(A$1:A1)<=ROW()-2,ROW()>5),2,RANDBETWEEN(0,2)))))
答案 2 :(得分:0)
这是一个随机解决方案。首先,创建一个可能的集合表。鉴于您的约束,只有5种可能的解决方案。我把这个表放在单元格B2:F10中,标题放在第1行。注意,这个表可以放在任何地方,如果愿意,甚至可以放在不同的表格上。在最终产品中,我可能会隐藏这些行。无论如何,它看起来像这样:
接下来,因为你想要一个随机数量的列,在单元格A12中我放入一个名为# of Columns
的标题,在单元格B12中是这个公式(随意调整上限和下限到你的#39} ;重新寻找,这只是3到10之间的随机数):=RANDBETWEEN(3,10)
现在我们可以设置我们的随机列以及它们使用的集合:
在单元格B14中并向右复制(到最大列数 在前面的公式中定义,所以在这个例子中它转到K. 因为B:K是10列),使用这个公式:
=IF(COLUMN(A14)>$B$12,"","Column "&COLUMN(A14))
在单元格B15中,右侧复制的是以下公式:
=IF(B14="","",INDEX($B$1:$F$1,,RANDBETWEEN(1,5)))
在单元格B16中并向右和向下复制9行(因此在此示例中为 复制到K24)是这个公式:
=IF(B$14="","",INDEX($B$2:$F$10,MATCH(LARGE(B$26:B$34,ROW(B1)),B$26:B$34,0),MATCH(B$15,$B$1:$F$1,0)))
完成后,它将如下所示(请注意,在完成此答案的下一步之前,它会显示#NUM!
错误,如下所述):
你会注意到第三个公式引用了我们尚未构建的范围,在第26:34行中。在该范围内,还有另一个充满随机数的表格,以便集合可以加扰以给我们随机化的结果。构建该表非常容易。在单元格B26中并上下复制到K34(再次,复制到最大列数和向下复制9行),这个公式是这样的:
=IF(B$14="","",RAND())
现在使用随机数发生器,您将获得第二张图像中显示的结果,其中9个数字的随机集合总和为10,包括0,1和2。此时,如果愿意,您可以将Sets和Randomizers表剪切/粘贴到不同的工作表,或者只是隐藏这些行。
答案 3 :(得分:0)
Because of the constraint, there are only 5 unique combinations of values to get to 10:
We pick one of the five possibilities at random, scramble the elements and stuff the results into a column.
Store the templates in Sheet1 and the output in columns A through Z in sheet Sheet2.
In Sheet1:
The code:
Sub croupier()
Dim Itms(1 To 9) As Variant
Dim i As Long, J As Long, s1 As Worksheet, s2 As Worksheet
Set s1 = Sheets("Sheet1")
Set s2 = Sheets("Sheet2")
For i = 1 To 26
J = Application.WorksheetFunction.RandBetween(1, 5)
For k = 1 To 9
Itms(k) = s1.Cells(k, J).Value
Next k
Call Shuffle(Itms)
For k = 1 To 9
s2.Cells(k, i).Value = Itms(k)
Next k
Next i
End Sub
Sub Shuffle(InOut() As Variant)
Dim HowMany As Long, i As Long, J As Long
Dim tempF As Double, temp As Variant
Hi = UBound(InOut)
Low = LBound(InOut)
ReDim Helper(Low To Hi) As Double
Randomize
For i = Low To Hi
Helper(i) = Rnd
Next i
J = (Hi - Low + 1) \ 2
Do While J > 0
For i = Low To Hi - J
If Helper(i) > Helper(i + J) Then
tempF = Helper(i)
Helper(i) = Helper(i + J)
Helper(i + J) = tempF
temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = temp
End If
Next i
For i = Hi - J To Low Step -1
If Helper(i) > Helper(i + J) Then
tempF = Helper(i)
Helper(i) = Helper(i + J)
Helper(i + J) = tempF
temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = temp
End If
Next i
J = J \ 2
Loop
End Sub
Sample Sheet2: