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 (최근 30일)
이전 댓글 표시
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
채택된 답변
Matt J
2023년 1월 5일
편집: Matt J
2023년 1월 6일
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
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!