How to split a number into 10 different numbers?
이전 댓글 표시
How to split a number into 10 different numbers randomly? Such as 50390 separate it into 10 random different numbers?
댓글 수: 1
Jos (10584)
2013년 12월 2일
편집: Jos (10584)
2013년 12월 2일
Do you mean that the sum of the 10 random numbers should be the original number? And should the numbers be positive, larger than zero, integers?
답변 (3개)
Andrei Bobrov
2013년 12월 2일
편집: Andrei Bobrov
2013년 12월 2일
a = 50390;
b = rand(10,1);
b = b/sum(b)*a;
out=round(b);
out(1) = out(1) - (a-sum(out));
a = 50390;
n = 10;
out = diff([0,sort(randperm(a-1,n-1)),a]);
댓글 수: 1
Mike Akarmann
2019년 10월 27일
Great job Andrei! Simple and elegant! Thanks!
Azzi Abdelmalek
2013년 12월 2일
편집: Azzi Abdelmalek
2013년 12월 2일
n=50390
idx=sort(randperm(n,10));
out=diff([idx n]);
out(1)=idx(1)+out(1);
sum(out)
%or in case the last number of idx is 50390
n=50390
idx=sort(randperm(n,10));
out=diff([idx n]);
out(end)=out(end)+idx(1)
sum(out)
Jos (10584)
2013년 12월 2일
Assuming all number should be positive integers larger than zero, this will give a random solution. Note that not all possible solutions are equally likely, but that might not be a problem.
S = 50390 % original number
n = 10 % partitions
f = rand(1,n)
f = f./ sum(f) % sum(f) = 1, approx.
V = round(f.*S)
V(V<1) = 1 % needs to be positive
V(1) = S - sum(V(2:end)) % deal with rounding errors etc.
isequal(sum(V),S) % check
카테고리
도움말 센터 및 File Exchange에서 Simulink 3D Animation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!