Здравствуйте, Caracrist, Вы писали:
C>Вопрос: какие числа нужно написать на кубиках так, чтобы игра оставалась честной.
C>Бонус: решить задачу используя только 13 разных чисел.
Решение с 10 числами:
{5, 5, 5, 8, 16, 16}
{2, 2, 9, 14, 14, 14}
{0, 7, 7, 11, 11, 17}}
Proof:
public static void main(String[] args) {
int[][] a = new int[][] {{5, 5, 5, 8, 16, 16}, {2, 2, 9, 14, 14, 14}, {0, 7, 7, 11, 11, 17}};
int m0=0,m1=0,m2=0;
for (int a0=0; a0<6; a0++)
for (int a1=0; a1<6; a1++)
for (int a2=0; a2<6; a2++) {
if (a[0][a0] > Math.max(a[1][a1], a[2][a2])) m0++;
if (a[1][a1] > Math.max(a[0][a0], a[2][a2])) m1++;
if (a[2][a2] > Math.max(a[1][a1], a[0][a0])) m2++;
}
System.out.println(m0 + " " + m1 + " " + m2);
m0=0;m1=0;m2=0;
for (int a0=0; a0<6; a0++)
for (int a1=0; a1<6; a1++)
for (int a2=0; a2<6; a2++) {
if (a[0][a0] < Math.min(a[1][a1], a[2][a2])) {
for (int b1=0; b1<6; b1++)
for (int b2=0; b2<6; b2++) {
if (a[1][b1]>a[2][b2]) m1++;
else m2++;
}
}
if (a[1][a1] < Math.min(a[0][a0], a[2][a2])) {
for (int b0=0; b0<6; b0++)
for (int b2=0; b2<6; b2++) {
if (a[0][b0]>a[2][b2]) m0++;
else m2++;
}
}
if (a[2][a2] < Math.min(a[1][a1], a[0][a0])) {
for (int b0=0; b0<6; b0++)
for (int b1=0; b1<6; b1++) {
if (a[0][b0]>a[1][b1]) m0++;
else m1++;
}
}
}
System.out.println(m0 + " " + m1 + " " + m2);
}
Вывод:
72 72 72
2592 2592 2592
Забавно, что такими кубиками честно играть только втроем. Вдвоем уже не получится.