【发布时间】:2011-05-30 21:15:23
【问题描述】:
我想知道是否有公式/技巧来计算标准 6 面骰子的右侧或左侧的数字,如果您知道哪个数字在顶部,哪个数字面向您。
需要它来解决问题,但我不想在 if 语句中列出所有 24 种可能性...:)
【问题讨论】:
-
好吧,只有 12 个,因为矩阵是对角对称的。
我想知道是否有公式/技巧来计算标准 6 面骰子的右侧或左侧的数字,如果您知道哪个数字在顶部,哪个数字面向您。
需要它来解决问题,但我不想在 if 语句中列出所有 24 种可能性...:)
【问题讨论】:
骰子的两面加起来总是 7(至少,这是惯例)。
通过消除过程,您可以知道“隐形”对是什么:
因此,对于上面的每一对,如果您可以从中看到一个数字,请将其删除。剩下的一对就是您要找的那一对。
由于无法确定骰子的“手性”,因此无法判断哪一对将在右侧,哪个在左侧。
【讨论】:
我不知道为什么会这样,但是:
对于每一对(顶部/面向),当然只有两种可能性,因为顶部值和面向值都各自消除,并且与左侧或右侧相反:例如,如果 1 在顶部, 并且一个 2 面向你,那么左右必须是 3 或 4...
因此,对于每个组合,如果值的总和为奇数且小于 7,或偶数且大于 7,则两个可能值中较低的在左侧,较高的在右侧。
.. 反之亦然
因为我在美国,我想这条规则适用于“右撇子”骰子,反之则适用于左撇子骰子。
【讨论】:
以编程方式,您可以很容易地做到这一点。这可能有点矫枉过正(因为您可以使用 if 语句),您还可以创建一个类,例如
public class Dice {
private DiceFace[] sides = new DiceFace[]{DiceFace.ONE, DiceFace.TWO, DiceFace.THREE, DiceFace.FOUR, DiceFace.FIVE, DiceFace.SIX};
class DiceFace {
// set the face number and connecting faces...the below figures are wrong, I don't have a set of dice to check agains
static final DiceFace ONE = new DiceFace(1, 2, 3, 4, 5);
private int face;
private int northFace;
private int southFace;
private int eastFace;
private int westFace;
public DiceFace(int face, int northFace, int southFace, int eastFace, int westFace) {
// set the values
}
}
}
然后,您可以编写一个方法,通过检查骰子及其左右两侧的值,为您的答案提供可能的值。
【讨论】:
没有 24 种可能性。
来自Wikipedia:
对面的数字之和 面孔是七。
既然你已经知道两个数字,那么剩下 4 种可能性。
我不确定您所说的“在顶部”和“面向您”是什么意思,但我认为您的意思是这里有两个相邻的面孔,所以您知道的只有两种可能性,因为您知道相反的面孔编号也是(而这两种可能性仅因左/右或右/左这两个数字不同。
因此,例如,使用展开的骰子,您的顶部有“1”,“2”面向您:
X
X1X
2
X
您现在知道对面将是“6”(底部)和“5”(背对您):
5
X1X
2
6
所以有这两种可能性:
5 5
314 413
2 2
6 6
当你知道你的骰子是“左撇子”还是“右撇子”时,只剩下一种可能性了(同样,Wikipedia):
这个约束还剩下一个 抽象设计选择:面孔 分别代表 1、2 和 3 可以放置在顺时针或 关于这个逆时针顺序 顶点。如果 1、2 和 3 面运行 逆时针围绕他们的共同点 顶点,骰子称为 “右手”;如果他们顺时针运行 它被称为“左撇子”。标准 现代西方骰子是右撇子, 而中国骰子往往 左撇子
因此,对于上面的示例,左侧是“左手”骰子,右侧是“右手”骰子。
【讨论】: