I am having an array with positive integers, and i want to know all the possibility that the sum of elements of the array is close to or equal to a number say (N))
2 views (last 30 days)
Show older comments
I am having an array with positive integers, and i want to know all the possibility that the sum of elements of the array is close to or equal to a number say (N)) and no index (element in the array) will be repeated
A = [ 0 7 30 16 23 11 19 15 28 8 8 7 14 6 19 11 12 26 17 6 15 5 10 ]
N = 40 (or close to 40 like 36,37,38,39)
the possible sum of the numbers are like
8+6+26 = 40
23+15 = 38
16+17+6=39
15+5+19=39
and so on
4 Comments
Accepted Answer
Matt J
on 5 Jan 2023
Edited: Matt J
on 6 Jan 2023
N=40;
A = [1 7 13 20 38 39 40];
A=unique(A);
n=find(cumsum(A)<=N,1,'last');
result=cell(n,1);
for i=1:n
tmp=subCollection(N,A,i);
tmp(:,end+1:n)=nan;
result{i}=tmp;
end
result=cell2mat(result) %final result
function T=subCollection(N,A,m)
J=nchoosek(1:numel(A),m);
I=repmat( (1:height(J))' ,1,m);
%S=sparse(I,J,1);
S=accumarray([I(:),J(:)],1);
delta=N-S*A(:);
C=(1./(1-S));
mincomp=min( C.*A(:).' ,[],2);
idx=delta<mincomp & delta>=0;
T=(1./S).*A(:).';
T=sort(T(idx,:),2);
T(isinf(T))=nan;
T=T(:,1:m);
end
2 Comments
More Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!