我有2个功能,1创建一副52张牌并将它们整理好。另一个功能是洗牌。我创建了甲板,它是有序的。该结构具有适合的属性和数字我无法改组它。我需要创建两个随机整数,范围从1到我们牌组中的牌数。使用这两个值,我们在这些指数上交换卡片。重复此交换过程很多次(~1000次)。我不能使用任何MATLAB的函数,如swap或randperm。
这是我的函数,它接受一个结构数组并返回混洗卡的结构数组:
function shuffle(input)
r=randi(1,52)
s=randi(1,52)
for index=1:52
temp=input(r).number;
input(r).number=input(s).number;
input(s).number=temp;
end;
答案 0 :(得分:0)
你已经找到了交换,但需要同时包含数字和套装。此外,你不想迭代52张牌,你想简单地交换2张牌~1000次。因此,在shuffle期间添加另一个输入N
作为要交换的次数,然后相应地使用for循环。此外,你需要让函数输出混乱的套牌(在C ++中,数组将通过引用传递,你不需要输出,但我不认为MATLAB会这样做。)
这应该可以解决问题:
function output = shuffle(input, N)
% swap two cards N times
for i = 1:N
% pick two random cards each time
r = randi(52);
s = randi(52);
% store one in temporary variables
tempNum = input(r).number;
tempSuit = input(r).suit;
% swap
input(r).number = input(s).number;
input(r).suit = input(s).suit;
input(s).number = tempNum;
input(s).suit = tempSuit;
end
output = input;