Just a small problem
1 次查看(过去 30 天)
显示 更早的评论
Hi! Can you help me please with this problem: How can I Write a function that produces random integers From 1000 to 9999, and including the numbers of different 4-digit (with no repetition)? In MatLab...
2 个评论
Andrew Newell
2011-12-30
For a start, see randint: http://www.mathworks.com/help/toolbox/comm/ref/randint.html.
采纳的回答
Fangjun Jiang
2011-12-30
function y=MyRandInt
while true
y=floor(8999*rand+1000);
if length(unique(num2str(y)))==4
return;
end
end
11 个评论
Jan
2011-12-30
Even, or especially, a beginner has to read the Getting Started chapters of the documentation. You cannot use such a powerful language like Matlab without spending the time to learn the basics.
Fangjun Jiang
2011-12-31
It took me more than 30 minutes to come up with the answer. 20 minutes for thinking about whether it is a homework assignment. At the end, I think it is not. 10 minutes for thinking about which approach is better, the permutation method or the try-and-error method.
I would not think this is a homework assignment for an entry level MATLAB class. Think about it, what aspect of the language (programming flow, for-loops, or if-else statment) would be a good fit to solve this problem?
Jan has been an A+ student here. But I would grade all three of his homework a B+. Which entry level class or beginner student would use randperm() or perms()? I would expect brutal force if b(4)~=b(3) && b(4)~=b(2) && b(4)~=b(1) ... etc.
更多回答(3 个)
Jan
2011-12-31
Finite and no large table:
a = 0:9;
i1 = ceil(rand * 9);
a(i1 + 1) = [];
p = randperm(9);
result = i1 * 1000 + a(p(1:3)) * [100; 10; 1]
2 个评论
Jan
2011-12-30
It really looks like a homework and your teacher/professor will not recommend this forum to other students any longer after your homework has been solved here. Be sure to mention the assistence you got, otherwise it would be cheating.
I'd prefer a solution, which is guaranteed to stop in finite time. But I have only this idea:
a = 0:9;
while true
b = a(randperm(10, 4)); % Matlab 2011b required
if b(1) ~= 0
break;
end
end
result = b * [1000; 100; 10; 1]
For earlier Matlab versions:
b = a(randperm(10));
...
result = b(1:4) * [1000; 100; 10; 1]
Jan
2011-12-30
An algorithm in finite time, but not really efficient:
K = perms(0:9);
K(K(:,1) == 0, :) = [];
index = ceil(rand * size(K, 1));
result = K(index, 1:4) * [1000; 100; 10; 1]
It is more efficient to create a [Nx4] table only instead of the [Nx10] table of perms:
K = VChooseKO(0:9, 4);
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!