要求:给定了一个数组和一个目标值,找出数组中哪些数据可构成目标值,并将其输出。
在所有方法中枚举法最为简单但却最容易理解。
具体思路:
生成一个随机的决策数组b,b中的数据只有0和1,将b与a相乘再求和,可以得到一个值c。
若c与k相等,将一维向量b存放到二维向量n中,重复k次。完成之后,利用unique函数删除
掉n中重复的行,最后通过size函数以及一个for循环,输出a中所有可能的数据搭配。
代码如下:
clear;clc;
k=459;%目标值
s=1;
a=[57,71,87,97,99,101,103,113,114,115,128,129,131,137,147,156,163,186];%给定数组
while s<=k %让s循环k次
b=rand(1,18);
for i=1:18
if b(i)<0.5
b(i)=0;
else
b(i)=1;
end
end
c=sum(a.*b);
if c == k
n(s,:)=b; %构建一个数组存放所有符合要求的b数组
s=s+1;
end
end
e=unique(n,'rows'); %利用unique删除重复的行
[f,g]=size(e); %找出e的行数、列数
for r=1:f
j(r,:)=a.*e(r,:); %构建一个新的数组来存放处理后的a数组
end
disp(j) %输出j数组
缺点:当a中的数据增多时,循环的次数可能不足以找出所有的b,并且计算时间长
优点:方法简单,适合新手练习