Учитывая две монеты, количество результатов будет 2 ^ 2 (две монеты только с двумя возможностями (голова (вверх) или хвост (вниз)). Дает следующие возможные комбинации:
00
01
10
11
Куда, 0
означает голову (вверх) и 1
означает хвост (вниз).
Вот код для печати предыдущих комбинаций:
for n=1:2^2
r(n) = dec2bin(n);
end
Я хочу напечатать все возможные комбинации для одних и тех же монет, но с тремя разными возможностями (голова (вверх), хвост (вниз) и между ними (не вверх или вниз))
Чтобы дать что-то вроде:
00
01
10
11
0B
B0
B1
1B
BB
Куда, B
означает, что одна из двух монет находится между (не вверх или вниз)
Есть идеи?
Решение Python:
from itertools import product
possible_values = '01B'
number_of_coins = 2
for result in product(possible_values, repeat=number_of_coins):
print(''.join(result))
# Output:
# 00
# 01
# 0B
# 10
# 11
# 1B
# B0
# B1
# BB
from itertools import product
outcomes = ["".join(item) for item in list(product('01B', repeat=2))]
for outcome in outcomes:
print(outcome)
#reusults:
00
01
0B
10
11
1B
B0
B1
BB
Решение Matlab:
n
количество возможных решений. В вашем случае 3 разных раза. k
это количество комплектов. В вашем случае 2 монеты. p
должен содержать матрицу с результатами.
n = 3; k = 2;
nk = nchoosek(1:n,k);
p=zeros(0,k);
for i=1:size(nk,1),
pi = perms(nk(i,:));
p = unique([p; pi],'rows');
end
Для большего количества решений проверьте: Возможные комбинации — порядок важен
Я нашел несколько решений для MATLAB. (Это не совсем мой код, я нашел некоторые части и адаптировал его). Разместите это, потому что @ C.Colden ‘ответ не полный
То, что вы хотите достичь, это перестановки с повторениями. К. Колден показывает это без повторов. Таким образом, вы можете пойти по этому пути:
Решение 1:
a = [1 2 3]
n = length(a)
k = 2
for ii = k:-1:1
temp = repmat(a,n^(k-ii),n^(ii-1));
res(:,ii) = temp(:);
end
Результат:
res =
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
И интересно Решение 2 если вам это нужно в виде строки:
dset={'12b','12b'};
n=numel(dset);
pt=[3:n,1,2];
r=cell(n,1);
[r{1:n}]=ndgrid(dset{:});
r=permute([r{:}],pt);
r=sortrows(reshape(r,[],n));
Результат:
r =
11
12
1b
21
22
2b
b1
b2
bb
Конечно, я не знаком с синтаксисом этих других языков, их решения выглядят слишком сложными.
Это просто двойная вложенность for
цикл:
C ++
#include <iostream>
using namespace std;
int main()
{
const char* ch = "01B";
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
cout << ch[i] << ch[j] << '\n';
}
}
Выход:
00
01
0B
10
11
1B
B0
B1
BB